aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs11
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/XEngine.cs19
2 files changed, 10 insertions, 20 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index a6f9250..0efcf72 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -219,8 +219,6 @@ namespace OpenSim.Region.Framework.Scenes
219 219
220 private int m_lastUpdate; 220 private int m_lastUpdate;
221 private bool m_firstHeartbeat = true; 221 private bool m_firstHeartbeat = true;
222
223 private object m_deleting_scene_object = new object();
224 222
225 private UpdatePrioritizationSchemes m_priorityScheme = UpdatePrioritizationSchemes.Time; 223 private UpdatePrioritizationSchemes m_priorityScheme = UpdatePrioritizationSchemes.Time;
226 private bool m_reprioritizationEnabled = true; 224 private bool m_reprioritizationEnabled = true;
@@ -2006,15 +2004,8 @@ namespace OpenSim.Region.Framework.Scenes
2006 public void DeleteSceneObject(SceneObjectGroup group, bool silent) 2004 public void DeleteSceneObject(SceneObjectGroup group, bool silent)
2007 { 2005 {
2008// m_log.DebugFormat("[SCENE]: Deleting scene object {0} {1}", group.Name, group.UUID); 2006// m_log.DebugFormat("[SCENE]: Deleting scene object {0} {1}", group.Name, group.UUID);
2009
2010 //SceneObjectPart rootPart = group.GetChildPart(group.UUID);
2011 2007
2012 // Serialise calls to RemoveScriptInstances to avoid 2008 group.RemoveScriptInstances(true);
2013 // deadlocking on m_parts inside SceneObjectGroup
2014 lock (m_deleting_scene_object)
2015 {
2016 group.RemoveScriptInstances(true);
2017 }
2018 2009
2019 SceneObjectPart[] partList = group.Parts; 2010 SceneObjectPart[] partList = group.Parts;
2020 2011
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index 5095037..e776f5a 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -176,12 +176,16 @@ namespace OpenSim.Region.ScriptEngine.XEngine
176 get { return m_ConfigSource; } 176 get { return m_ConfigSource; }
177 } 177 }
178 178
179 /// <summary>
180 /// Event fired after the script engine has finished removing a script.
181 /// </summary>
179 public event ScriptRemoved OnScriptRemoved; 182 public event ScriptRemoved OnScriptRemoved;
183
184 /// <summary>
185 /// Event fired after the script engine has finished removing a script from an object.
186 /// </summary>
180 public event ObjectRemoved OnObjectRemoved; 187 public event ObjectRemoved OnObjectRemoved;
181 188
182 //
183 // IRegionModule functions
184 //
185 public void Initialise(IConfigSource configSource) 189 public void Initialise(IConfigSource configSource)
186 { 190 {
187 if (configSource.Configs["XEngine"] == null) 191 if (configSource.Configs["XEngine"] == null)
@@ -1122,7 +1126,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1122 // Give the script some time to finish processing its last event. Simply aborting the script thread can 1126 // Give the script some time to finish processing its last event. Simply aborting the script thread can
1123 // cause issues on mono 2.6, 2.10 and possibly later where locks are not released properly on abort. 1127 // cause issues on mono 2.6, 2.10 and possibly later where locks are not released properly on abort.
1124 instance.Stop(1000); 1128 instance.Stop(1000);
1125 1129
1126// bool objectRemoved = false; 1130// bool objectRemoved = false;
1127 1131
1128 lock (m_PrimObjects) 1132 lock (m_PrimObjects)
@@ -1153,14 +1157,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
1153 UnloadAppDomain(instance.AppDomain); 1157 UnloadAppDomain(instance.AppDomain);
1154 } 1158 }
1155 1159
1156 instance = null;
1157
1158 ObjectRemoved handlerObjectRemoved = OnObjectRemoved; 1160 ObjectRemoved handlerObjectRemoved = OnObjectRemoved;
1159 if (handlerObjectRemoved != null) 1161 if (handlerObjectRemoved != null)
1160 { 1162 handlerObjectRemoved(instance.ObjectID);
1161 SceneObjectPart part = m_Scene.GetSceneObjectPart(localID);
1162 handlerObjectRemoved(part.UUID);
1163 }
1164 1163
1165 ScriptRemoved handlerScriptRemoved = OnScriptRemoved; 1164 ScriptRemoved handlerScriptRemoved = OnScriptRemoved;
1166 if (handlerScriptRemoved != null) 1165 if (handlerScriptRemoved != null)