diff options
author | Justin Clark-Casey (justincc) | 2010-09-17 01:16:21 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2010-09-17 01:16:21 +0100 |
commit | 50724292636c1ee68e2d3d215285b52606c6e7f5 (patch) | |
tree | 0eb92cc6862d16cf9f7419c00b83f6bb6a9431f9 /OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |
parent | Merge branch 'master' of ssh://opensimulator.org/var/git/opensim (diff) | |
download | opensim-SC_OLD-50724292636c1ee68e2d3d215285b52606c6e7f5.zip opensim-SC_OLD-50724292636c1ee68e2d3d215285b52606c6e7f5.tar.gz opensim-SC_OLD-50724292636c1ee68e2d3d215285b52606c6e7f5.tar.bz2 opensim-SC_OLD-50724292636c1ee68e2d3d215285b52606c6e7f5.tar.xz |
Send KillPackets on the Task queue rather than the State queue
Object updates are sent on the task queue. It's possible for an object update to be placed on the client queue before a kill packet comes along.
The kill packet would then be placed on the state queue and possibly get sent before the update
If the update gets sent afterwards then client get undeletable no owner objects until relog
Placing the kills in the task queue should mean that they are received after updates. The kill record prevents subsequent updates getting on the queue
Comments state that updates are sent via the state queue but this isn't true. If this was the case this problem might not exist.
Diffstat (limited to 'OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs')
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 2163c12..cede050 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -1523,7 +1523,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1523 | lock (m_entityUpdates.SyncRoot) | 1523 | lock (m_entityUpdates.SyncRoot) |
1524 | { | 1524 | { |
1525 | m_killRecord.Add(localID); | 1525 | m_killRecord.Add(localID); |
1526 | OutPacket(kill, ThrottleOutPacketType.State); | 1526 | |
1527 | // The throttle queue used here must match that being used for updates. Otherwise, there is a | ||
1528 | // chance that a kill packet put on a separate queue will be sent to the client before an existing | ||
1529 | // update packet on another queue. Receiving updates after kills results in unowned and undeletable | ||
1530 | // scene objects in a viewer until that viewer is relogged in. | ||
1531 | OutPacket(kill, ThrottleOutPacketType.Task); | ||
1527 | } | 1532 | } |
1528 | } | 1533 | } |
1529 | } | 1534 | } |