diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 9e59d5040b..3a066d426e 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -219,8 +219,6 @@ namespace OpenSim.Region.Framework.Scenes
private int m_lastUpdate;
private bool m_firstHeartbeat = true;
-
- private object m_deleting_scene_object = new object();
private UpdatePrioritizationSchemes m_priorityScheme = UpdatePrioritizationSchemes.Time;
private bool m_reprioritizationEnabled = true;
@@ -1994,15 +1992,8 @@ namespace OpenSim.Region.Framework.Scenes
public void DeleteSceneObject(SceneObjectGroup group, bool silent)
{
// m_log.DebugFormat("[SCENE]: Deleting scene object {0} {1}", group.Name, group.UUID);
-
- //SceneObjectPart rootPart = group.GetChildPart(group.UUID);
- // Serialise calls to RemoveScriptInstances to avoid
- // deadlocking on m_parts inside SceneObjectGroup
- lock (m_deleting_scene_object)
- {
- group.RemoveScriptInstances(true);
- }
+ group.RemoveScriptInstances(true);
SceneObjectPart[] partList = group.Parts;
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index 44397b7095..105d97da47 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -176,12 +176,16 @@ namespace OpenSim.Region.ScriptEngine.XEngine
get { return m_ConfigSource; }
}
+ ///
+ /// Event fired after the script engine has finished removing a script.
+ ///
public event ScriptRemoved OnScriptRemoved;
+
+ ///
+ /// Event fired after the script engine has finished removing a script from an object.
+ ///
public event ObjectRemoved OnObjectRemoved;
- //
- // IRegionModule functions
- //
public void Initialise(IConfigSource configSource)
{
if (configSource.Configs["XEngine"] == null)
@@ -1122,7 +1126,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
// Give the script some time to finish processing its last event. Simply aborting the script thread can
// cause issues on mono 2.6, 2.10 and possibly later where locks are not released properly on abort.
instance.Stop(1000);
-
+
// bool objectRemoved = false;
lock (m_PrimObjects)
@@ -1153,14 +1157,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
UnloadAppDomain(instance.AppDomain);
}
- instance = null;
-
ObjectRemoved handlerObjectRemoved = OnObjectRemoved;
if (handlerObjectRemoved != null)
- {
- SceneObjectPart part = m_Scene.GetSceneObjectPart(localID);
- handlerObjectRemoved(part.UUID);
- }
+ handlerObjectRemoved(instance.ObjectID);
ScriptRemoved handlerScriptRemoved = OnScriptRemoved;
if (handlerScriptRemoved != null)