aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/Scene.cs
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2010-01-25 21:51:58 +0000
committerJustin Clark-Casey (justincc)2010-01-25 21:51:58 +0000
commit38cfc9366ce264d2aeb6409df48be7cecc348952 (patch)
tree2f90126ff91a339436d93f1c7d13fd69e1a44f24 /OpenSim/Region/Framework/Scenes/Scene.cs
parent* Quick fix to Remote Console session ID handling. (diff)
downloadopensim-SC-38cfc9366ce264d2aeb6409df48be7cecc348952.zip
opensim-SC-38cfc9366ce264d2aeb6409df48be7cecc348952.tar.gz
opensim-SC-38cfc9366ce264d2aeb6409df48be7cecc348952.tar.bz2
opensim-SC-38cfc9366ce264d2aeb6409df48be7cecc348952.tar.xz
Fix a problem where llDie() calls were sometimes leaving dead objects behind.
When an object was deleted, the remove script instance call was aggregating the scripting events as normal. This would queue a full update of the prim before the viewer was notifed of the deletion of that prim (QuitPacket) On some occasions, the QuitPacket would be sent before the full update was dequeued and sent. In principle, you would think that a viewer would ignore updates for deleted prims. But it appears that in the Linden viewer (1.23.5), a prim update that arrives after the prim was deleted instead makes the deleted prim persist in the viewer. Such prims have no properties and cannot be removed from the viewer except by a relog. This change stops the prim event aggregation call if it's being deleted anyway, hence removing the spurious viewer-confusing update.
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Scene.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs8
1 files changed, 6 insertions, 2 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 234554e..4da05cf 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -1009,7 +1009,7 @@ namespace OpenSim.Region.Framework.Scenes
1009 { 1009 {
1010 if (ent is SceneObjectGroup) 1010 if (ent is SceneObjectGroup)
1011 { 1011 {
1012 ((SceneObjectGroup) ent).RemoveScriptInstances(); 1012 ((SceneObjectGroup) ent).RemoveScriptInstances(false);
1013 } 1013 }
1014 } 1014 }
1015 } 1015 }
@@ -1884,13 +1884,15 @@ namespace OpenSim.Region.Framework.Scenes
1884 /// <param name="silent">Suppress broadcasting changes to other clients.</param> 1884 /// <param name="silent">Suppress broadcasting changes to other clients.</param>
1885 public void DeleteSceneObject(SceneObjectGroup group, bool silent) 1885 public void DeleteSceneObject(SceneObjectGroup group, bool silent)
1886 { 1886 {
1887// m_log.DebugFormat("[SCENE]: Deleting scene object {0} {1}", group.Name, group.UUID);
1888
1887 //SceneObjectPart rootPart = group.GetChildPart(group.UUID); 1889 //SceneObjectPart rootPart = group.GetChildPart(group.UUID);
1888 1890
1889 // Serialise calls to RemoveScriptInstances to avoid 1891 // Serialise calls to RemoveScriptInstances to avoid
1890 // deadlocking on m_parts inside SceneObjectGroup 1892 // deadlocking on m_parts inside SceneObjectGroup
1891 lock (m_deleting_scene_object) 1893 lock (m_deleting_scene_object)
1892 { 1894 {
1893 group.RemoveScriptInstances(); 1895 group.RemoveScriptInstances(true);
1894 } 1896 }
1895 1897
1896 foreach (SceneObjectPart part in group.Children.Values) 1898 foreach (SceneObjectPart part in group.Children.Values)
@@ -1918,6 +1920,8 @@ namespace OpenSim.Region.Framework.Scenes
1918 } 1920 }
1919 1921
1920 group.DeleteGroup(silent); 1922 group.DeleteGroup(silent);
1923
1924// m_log.DebugFormat("[SCENE]: Exit DeleteSceneObject() for {0} {1}", group.Name, group.UUID);
1921 } 1925 }
1922 1926
1923 /// <summary> 1927 /// <summary>