diff options
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 320a2fa..677bd14 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -327,7 +327,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
327 | /// thread servicing the m_primFullUpdates queue after a kill. If this happens the object persists as an | 327 | /// thread servicing the m_primFullUpdates queue after a kill. If this happens the object persists as an |
328 | /// ownerless phantom. | 328 | /// ownerless phantom. |
329 | /// | 329 | /// |
330 | /// All manipulation of this set has to occur under a m_primFullUpdate.SyncRoot lock | 330 | /// All manipulation of this set has to occur under an m_entityUpdates.SyncRoot lock |
331 | /// | 331 | /// |
332 | /// </value> | 332 | /// </value> |
333 | protected HashSet<uint> m_killRecord; | 333 | protected HashSet<uint> m_killRecord; |
@@ -382,18 +382,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
382 | public string ActiveGroupName { get { return m_activeGroupName; } } | 382 | public string ActiveGroupName { get { return m_activeGroupName; } } |
383 | public ulong ActiveGroupPowers { get { return m_activeGroupPowers; } } | 383 | public ulong ActiveGroupPowers { get { return m_activeGroupPowers; } } |
384 | public bool IsGroupMember(UUID groupID) { return m_groupPowers.ContainsKey(groupID); } | 384 | public bool IsGroupMember(UUID groupID) { return m_groupPowers.ContainsKey(groupID); } |
385 | |||
385 | /// <summary> | 386 | /// <summary> |
386 | /// First name of the agent/avatar represented by the client | 387 | /// First name of the agent/avatar represented by the client |
387 | /// </summary> | 388 | /// </summary> |
388 | public string FirstName { get { return m_firstName; } } | 389 | public string FirstName { get { return m_firstName; } } |
390 | |||
389 | /// <summary> | 391 | /// <summary> |
390 | /// Last name of the agent/avatar represented by the client | 392 | /// Last name of the agent/avatar represented by the client |
391 | /// </summary> | 393 | /// </summary> |
392 | public string LastName { get { return m_lastName; } } | 394 | public string LastName { get { return m_lastName; } } |
395 | |||
393 | /// <summary> | 396 | /// <summary> |
394 | /// Full name of the client (first name and last name) | 397 | /// Full name of the client (first name and last name) |
395 | /// </summary> | 398 | /// </summary> |
396 | public string Name { get { return FirstName + " " + LastName; } } | 399 | public string Name { get { return FirstName + " " + LastName; } } |
400 | |||
397 | public uint CircuitCode { get { return m_circuitCode; } } | 401 | public uint CircuitCode { get { return m_circuitCode; } } |
398 | public int MoneyBalance { get { return m_moneyBalance; } } | 402 | public int MoneyBalance { get { return m_moneyBalance; } } |
399 | public int NextAnimationSequenceNumber { get { return m_animationSequenceNumber++; } } | 403 | public int NextAnimationSequenceNumber { get { return m_animationSequenceNumber++; } } |
@@ -3528,6 +3532,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3528 | EntityUpdate update; | 3532 | EntityUpdate update; |
3529 | while (updatesThisCall < maxUpdates && m_entityUpdates.TryDequeue(out update)) | 3533 | while (updatesThisCall < maxUpdates && m_entityUpdates.TryDequeue(out update)) |
3530 | { | 3534 | { |
3535 | // Please do not remove this unless you can demonstrate on the OpenSim mailing list that a client | ||
3536 | // will never receive an update after a prim kill. Even then, keeping the kill record may be a good | ||
3537 | // safety measure. | ||
3538 | // | ||
3539 | // Receiving updates after kills results in undeleteable prims that persist until relog and | ||
3540 | // currently occurs because prims can be deleted before all queued updates are sent. | ||
3541 | if (m_killRecord.Contains(update.Entity.LocalId)) | ||
3542 | { | ||
3543 | // m_log.WarnFormat( | ||
3544 | // "[CLIENT]: Preventing full update for prim with local id {0} after client for user {1} told it was deleted", | ||
3545 | // update.Entity.LocalId, Name); | ||
3546 | continue; | ||
3547 | } | ||
3548 | |||
3531 | if (update.Entity is SceneObjectPart) | 3549 | if (update.Entity is SceneObjectPart) |
3532 | { | 3550 | { |
3533 | SceneObjectPart part = (SceneObjectPart)update.Entity; | 3551 | SceneObjectPart part = (SceneObjectPart)update.Entity; |