diff options
Merge branch 'master' into careminster-presence-refactor
Also prevent god takes from ending up in Lost and Found
Diffstat (limited to 'OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs')
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index f99fa16..9189260 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -3598,14 +3598,30 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3598 | EntityUpdate update; | 3598 | EntityUpdate update; |
3599 | while (updatesThisCall < maxUpdates && m_entityUpdates.TryDequeue(out update)) | 3599 | while (updatesThisCall < maxUpdates && m_entityUpdates.TryDequeue(out update)) |
3600 | { | 3600 | { |
3601 | // If we have sent a kill packet for this object | ||
3602 | // drop any updates on the floor | ||
3603 | if (update.Entity is SceneObjectPart) | 3601 | if (update.Entity is SceneObjectPart) |
3604 | { | 3602 | { |
3605 | SceneObjectPart part = (SceneObjectPart)update.Entity; | 3603 | SceneObjectPart part = (SceneObjectPart)update.Entity; |
3606 | if (m_killRecord.Contains(part.ParentGroup.RootPart.LocalId)) | 3604 | if (m_killRecord.Contains(part.ParentGroup.RootPart.LocalId)) |
3607 | continue; | 3605 | continue; |
3608 | 3606 | ||
3607 | // Please do not remove this unless you can demonstrate on the OpenSim mailing list that a client | ||
3608 | // will never receive an update after a prim kill. Even then, keeping the kill record may be a good | ||
3609 | // safety measure. | ||
3610 | // | ||
3611 | // If a Linden Lab 1.23.5 client (and possibly later and earlier) receives an object update | ||
3612 | // after a kill, it will keep displaying the deleted object until relog. OpenSim currently performs | ||
3613 | // updates and kills on different threads with different scheduling strategies, hence this protection. | ||
3614 | // | ||
3615 | // This doesn't appear to apply to child prims - a client will happily ignore these updates | ||
3616 | // after the root prim has been deleted. | ||
3617 | if (m_killRecord.Contains(part.LocalId)) | ||
3618 | { | ||
3619 | // m_log.WarnFormat( | ||
3620 | // "[CLIENT]: Preventing update for prim with local id {0} after client for user {1} told it was deleted", | ||
3621 | // part.LocalId, Name); | ||
3622 | continue; | ||
3623 | } | ||
3624 | |||
3609 | if (part.ParentGroup.IsAttachment && m_disableFacelights) | 3625 | if (part.ParentGroup.IsAttachment && m_disableFacelights) |
3610 | { | 3626 | { |
3611 | if (part.ParentGroup.RootPart.Shape.State != (byte)AttachmentPoint.LeftHand && | 3627 | if (part.ParentGroup.RootPart.Shape.State != (byte)AttachmentPoint.LeftHand && |