aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs38
1 files changed, 17 insertions, 21 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index e17ef2b..df6a1cf 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -2065,41 +2065,37 @@ namespace OpenSim.Region.Framework.Scenes
2065 { 2065 {
2066 // We need to keep track of this state in case this group is still queued for backup. 2066 // We need to keep track of this state in case this group is still queued for backup.
2067 IsDeleted = true; 2067 IsDeleted = true;
2068 HasGroupChanged = true;
2069 2068
2070 DetachFromBackup(); 2069 DetachFromBackup();
2071 2070
2071 if(Scene == null) // should not happen unless restart/shutdown ?
2072 return;
2073
2072 SceneObjectPart[] parts = m_parts.GetArray(); 2074 SceneObjectPart[] parts = m_parts.GetArray();
2073 for (int i = 0; i < parts.Length; i++) 2075 for (int i = 0; i < parts.Length; i++)
2074 { 2076 {
2075 SceneObjectPart part = parts[i]; 2077 SceneObjectPart part = parts[i];
2076 2078
2077 if (Scene != null) 2079 Scene.ForEachScenePresence(delegate(ScenePresence avatar)
2078 { 2080 {
2079 Scene.ForEachScenePresence(delegate(ScenePresence avatar) 2081 if (!avatar.IsChildAgent && avatar.ParentID == LocalId)
2080 { 2082 avatar.StandUp();
2081 if (!avatar.IsChildAgent && avatar.ParentID == LocalId)
2082 avatar.StandUp();
2083 2083
2084 if (!silent) 2084 if (!silent)
2085 {
2086 part.ClearUpdateSchedule();
2087 if (part == m_rootPart)
2085 { 2088 {
2086 part.ClearUpdateSchedule(); 2089 if (!IsAttachment
2087 if (part == m_rootPart) 2090 || AttachedAvatar == avatar.ControllingClient.AgentId
2091 || !HasPrivateAttachmentPoint)
2088 { 2092 {
2089 if (!IsAttachment 2093 // Send a kill object immediately
2090 || AttachedAvatar == avatar.ControllingClient.AgentId 2094 avatar.ControllingClient.SendKillObject(new List<uint> { part.LocalId });
2091 || !HasPrivateAttachmentPoint)
2092 {
2093 // Send a kill object immediately
2094 avatar.ControllingClient.SendKillObject(new List<uint> { part.LocalId });
2095 // Also, send a terse update; in case race conditions make the object pop again in the client,
2096 // this update will send another kill object
2097 m_rootPart.SendTerseUpdateToClient(avatar.ControllingClient);
2098 }
2099 } 2095 }
2100 } 2096 }
2101 }); 2097 }
2102 } 2098 });
2103 } 2099 }
2104 } 2100 }
2105 2101