diff options
author | Justin Clark-Casey (justincc) | 2010-01-25 21:51:58 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2010-01-25 21:51:58 +0000 |
commit | 38cfc9366ce264d2aeb6409df48be7cecc348952 (patch) | |
tree | 2f90126ff91a339436d93f1c7d13fd69e1a44f24 /OpenSim/Region/ClientStack/LindenUDP | |
parent | * Quick fix to Remote Console session ID handling. (diff) | |
download | opensim-SC-38cfc9366ce264d2aeb6409df48be7cecc348952.zip opensim-SC-38cfc9366ce264d2aeb6409df48be7cecc348952.tar.gz opensim-SC-38cfc9366ce264d2aeb6409df48be7cecc348952.tar.bz2 opensim-SC-38cfc9366ce264d2aeb6409df48be7cecc348952.tar.xz |
Fix a problem where llDie() calls were sometimes leaving dead objects behind.
When an object was deleted, the remove script instance call was aggregating the scripting events as normal.
This would queue a full update of the prim before the viewer was notifed of the deletion of that prim (QuitPacket)
On some occasions, the QuitPacket would be sent before the full update was dequeued and sent.
In principle, you would think that a viewer would ignore updates for deleted prims. But it appears that in the Linden viewer (1.23.5),
a prim update that arrives after the prim was deleted instead makes the deleted prim persist in the viewer. Such prims have no properties
and cannot be removed from the viewer except by a relog.
This change stops the prim event aggregation call if it's being deleted anyway, hence removing the spurious viewer-confusing update.
Diffstat (limited to 'OpenSim/Region/ClientStack/LindenUDP')
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 4b5e4c4..1d364d4 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -1465,6 +1465,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1465 | 1465 | ||
1466 | public void SendKillObject(ulong regionHandle, uint localID) | 1466 | public void SendKillObject(ulong regionHandle, uint localID) |
1467 | { | 1467 | { |
1468 | // m_log.DebugFormat("[CLIENT]: Sending KillObjectPacket to {0} for {1} in {2}", Name, localID, regionHandle); | ||
1469 | |||
1468 | KillObjectPacket kill = (KillObjectPacket)PacketPool.Instance.GetPacket(PacketType.KillObject); | 1470 | KillObjectPacket kill = (KillObjectPacket)PacketPool.Instance.GetPacket(PacketType.KillObject); |
1469 | // TODO: don't create new blocks if recycling an old packet | 1471 | // TODO: don't create new blocks if recycling an old packet |
1470 | kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; | 1472 | kill.ObjectData = new KillObjectPacket.ObjectDataBlock[1]; |
@@ -3472,6 +3474,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3472 | 3474 | ||
3473 | public void SendPrimitiveToClient(SendPrimitiveData data) | 3475 | public void SendPrimitiveToClient(SendPrimitiveData data) |
3474 | { | 3476 | { |
3477 | // string text = data.text; | ||
3478 | // if (text.IndexOf("\n") >= 0) | ||
3479 | // text = text.Remove(text.IndexOf("\n")); | ||
3480 | // m_log.DebugFormat( | ||
3481 | // "[CLIENT]: Placing request to send full info about prim {0} text {1} to client {2}", | ||
3482 | // data.localID, text, Name); | ||
3483 | |||
3475 | if (data.priority == double.NaN) | 3484 | if (data.priority == double.NaN) |
3476 | { | 3485 | { |
3477 | m_log.Error("[LLClientView] SendPrimitiveToClient received a NaN priority, dropping update"); | 3486 | m_log.Error("[LLClientView] SendPrimitiveToClient received a NaN priority, dropping update"); |
@@ -3509,7 +3518,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
3509 | 3518 | ||
3510 | outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[count]; | 3519 | outPacket.ObjectData = new ObjectUpdatePacket.ObjectDataBlock[count]; |
3511 | for (int i = 0; i < count; i++) | 3520 | for (int i = 0; i < count; i++) |
3521 | { | ||
3512 | outPacket.ObjectData[i] = m_primFullUpdates.Dequeue(); | 3522 | outPacket.ObjectData[i] = m_primFullUpdates.Dequeue(); |
3523 | |||
3524 | // string text = Util.FieldToString(outPacket.ObjectData[i].Text); | ||
3525 | // if (text.IndexOf("\n") >= 0) | ||
3526 | // text = text.Remove(text.IndexOf("\n")); | ||
3527 | // m_log.DebugFormat( | ||
3528 | // "[CLIENT]: Sending full info about prim {0} text {1} to client {2}", | ||
3529 | // outPacket.ObjectData[i].ID, text, Name); | ||
3530 | } | ||
3513 | } | 3531 | } |
3514 | 3532 | ||
3515 | OutPacket(outPacket, ThrottleOutPacketType.State); | 3533 | OutPacket(outPacket, ThrottleOutPacketType.State); |