diff options
author | Diva Canto | 2016-06-12 12:23:52 -0700 |
---|---|---|
committer | Diva Canto | 2016-06-12 12:23:52 -0700 |
commit | 42a9afdc43cc63ddea75cb3baa89f2600f27aa99 (patch) | |
tree | 45546118c6faa42897d57c5750aa917429b1dff3 /OpenSim/Region/Framework/Scenes | |
parent | Restore SendAgentGroupDataUpdate() call in GroupsModule.cs. (diff) | |
download | opensim-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.cs | 7 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 3 |
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)) |