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)