aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes
diff options
context:
space:
mode:
authorDiva Canto2016-06-12 12:23:52 -0700
committerDiva Canto2016-06-12 12:23:52 -0700
commit42a9afdc43cc63ddea75cb3baa89f2600f27aa99 (patch)
tree45546118c6faa42897d57c5750aa917429b1dff3 /OpenSim/Region/Framework/Scenes
parentRestore SendAgentGroupDataUpdate() call in GroupsModule.cs. (diff)
downloadopensim-SC-42a9afdc43cc63ddea75cb3baa89f2600f27aa99.zip
opensim-SC-42a9afdc43cc63ddea75cb3baa89f2600f27aa99.tar.gz
opensim-SC-42a9afdc43cc63ddea75cb3baa89f2600f27aa99.tar.bz2
opensim-SC-42a9afdc43cc63ddea75cb3baa89f2600f27aa99.tar.xz
Mantis #7858: DeleteSceneObject done slightly differently. ProcessEntities now checks whether the objects have been deleted and, if so, sends an extra kill object packet, in order to compensate for potential race conditions encountered by the first one.
Note: I still cannot reproduce this problem, but I was able to emulate it by adding an artificial delay on ProcessEntities, which did, indeed, result in objects not being deleted. This fix fixed my emulated scenario.
Diffstat (limited to 'OpenSim/Region/Framework/Scenes')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs7
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs3
2 files changed, 7 insertions, 3 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 04db123..09dc663 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -1987,6 +1987,7 @@ namespace OpenSim.Region.Framework.Scenes
1987 { 1987 {
1988 // We need to keep track of this state in case this group is still queued for backup. 1988 // We need to keep track of this state in case this group is still queued for backup.
1989 IsDeleted = true; 1989 IsDeleted = true;
1990 HasGroupChanged = true;
1990 1991
1991 DetachFromBackup(); 1992 DetachFromBackup();
1992 1993
@@ -2010,7 +2011,13 @@ namespace OpenSim.Region.Framework.Scenes
2010 if (!IsAttachment 2011 if (!IsAttachment
2011 || AttachedAvatar == avatar.ControllingClient.AgentId 2012 || AttachedAvatar == avatar.ControllingClient.AgentId
2012 || !HasPrivateAttachmentPoint) 2013 || !HasPrivateAttachmentPoint)
2014 {
2015 // Send a kill object immediately
2013 avatar.ControllingClient.SendKillObject(new List<uint> { part.LocalId }); 2016 avatar.ControllingClient.SendKillObject(new List<uint> { part.LocalId });
2017 // Also, send a terse update; in case race conditions make the object pop again in the client,
2018 // this update will send another kill object
2019 m_rootPart.SendTerseUpdateToClient(avatar.ControllingClient);
2020 }
2014 } 2021 }
2015 } 2022 }
2016 }); 2023 });
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 7d95c8d..b4feb9a 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -5390,9 +5390,6 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
5390 5390
5391 public void SendTerseUpdateToClient(IClientAPI remoteClient) 5391 public void SendTerseUpdateToClient(IClientAPI remoteClient)
5392 { 5392 {
5393 if (ParentGroup.IsDeleted)
5394 return;
5395
5396 if (ParentGroup.IsAttachment 5393 if (ParentGroup.IsAttachment
5397 && (ParentGroup.RootPart != this 5394 && (ParentGroup.RootPart != this
5398 || ParentGroup.AttachedAvatar != remoteClient.AgentId && ParentGroup.HasPrivateAttachmentPoint)) 5395 || ParentGroup.AttachedAvatar != remoteClient.AgentId && ParentGroup.HasPrivateAttachmentPoint))