aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs33
1 files changed, 19 insertions, 14 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 3576a88..3fc195a 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -174,6 +174,7 @@ namespace OpenSim.Region.Framework.Scenes
174 private bool m_firstHeartbeat = true; 174 private bool m_firstHeartbeat = true;
175 175
176 private object m_deleting_scene_object = new object(); 176 private object m_deleting_scene_object = new object();
177 private object m_cleaningAttachments = new object();
177 178
178 private UpdatePrioritizationSchemes m_priorityScheme = UpdatePrioritizationSchemes.Time; 179 private UpdatePrioritizationSchemes m_priorityScheme = UpdatePrioritizationSchemes.Time;
179 private bool m_reprioritizationEnabled = true; 180 private bool m_reprioritizationEnabled = true;
@@ -4995,25 +4996,29 @@ namespace OpenSim.Region.Framework.Scenes
4995 List<SceneObjectGroup> objectsToDelete = 4996 List<SceneObjectGroup> objectsToDelete =
4996 new List<SceneObjectGroup>(); 4997 new List<SceneObjectGroup>();
4997 4998
4998 ForEachSOG(delegate (SceneObjectGroup grp) 4999 lock (m_cleaningAttachments)
4999 { 5000 {
5000 if (grp.RootPart.Shape.State != 0) 5001 ForEachSOG(delegate (SceneObjectGroup grp)
5001 { 5002 {
5002 if (grp.RootPart.Shape.PCode == 0 && grp.RootPart.Shape.State != 0 && (!objectsToDelete.Contains(grp))) 5003 if (grp.RootPart.Shape.PCode == 0 && grp.RootPart.Shape.State != 0 && (!objectsToDelete.Contains(grp)))
5003 { 5004 {
5004 objectsToDelete.Add(grp); 5005 UUID agentID = grp.OwnerID;
5005 return; 5006 if (agentID == UUID.Zero)
5007 {
5008 objectsToDelete.Add(grp);
5009 return;
5010 }
5011
5012 ScenePresence sp = GetScenePresence(agentID);
5013 if (sp == null)
5014 {
5015 objectsToDelete.Add(grp);
5016 return;
5017 }
5006 } 5018 }
5019 });
5020 }
5007 5021
5008 ScenePresence sp = GetScenePresence(agentID);
5009 if (sp == null)
5010 {
5011 objectsToDelete.Add(grp);
5012 return;
5013 }
5014 }
5015 });
5016
5017 foreach (SceneObjectGroup grp in objectsToDelete) 5022 foreach (SceneObjectGroup grp in objectsToDelete)
5018 { 5023 {
5019 m_log.InfoFormat("[SCENE]: Deleting dropped attachment {0} of user {1}", grp.UUID, grp.OwnerID); 5024 m_log.InfoFormat("[SCENE]: Deleting dropped attachment {0} of user {1}", grp.UUID, grp.OwnerID);