diff options
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.cs | 33 |
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); |