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.
This commit is contained in:
Diva Canto
2016-06-12 12:23:52 -07:00
parent 9ebdae8676
commit 42a9afdc43
3 changed files with 34 additions and 9 deletions

View File

@@ -1987,6 +1987,7 @@ namespace OpenSim.Region.Framework.Scenes
{
// We need to keep track of this state in case this group is still queued for backup.
IsDeleted = true;
HasGroupChanged = true;
DetachFromBackup();
@@ -2010,7 +2011,13 @@ namespace OpenSim.Region.Framework.Scenes
if (!IsAttachment
|| AttachedAvatar == avatar.ControllingClient.AgentId
|| !HasPrivateAttachmentPoint)
{
// Send a kill object immediately
avatar.ControllingClient.SendKillObject(new List<uint> { part.LocalId });
// Also, send a terse update; in case race conditions make the object pop again in the client,
// this update will send another kill object
m_rootPart.SendTerseUpdateToClient(avatar.ControllingClient);
}
}
}
});