From 9b7e66ceda0d7fb17af5b29f3b2be4567f1c2211 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Sun, 10 Aug 2008 16:37:45 +0000 Subject: [PATCH] Attempt to address Mantis #1905, #1909 Prevent re-sequencing of resent packets. Thanks, ckrinke, for catching that, it is what was happening. --- .../ClientStack/LindenUDP/LLPacketHandler.cs | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs b/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs index aaa81132b1..f7644050b0 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs @@ -240,6 +240,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP return; } + packet.Header.Sequence = 0; + lock (m_NeedAck) { DropResend(id); @@ -724,18 +726,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP packet.TickCount = System.Environment.TickCount; // Assign sequence number here to prevent out of order packets - packet.Header.Sequence = NextPacketSequenceNumber(); + if(packet.Header.Sequence == 0) + { + packet.Header.Sequence = NextPacketSequenceNumber(); - lock (m_NeedAck) - { - // We want to see that packet arrive if it's reliable - if (packet.Header.Reliable) - { - m_UnackedBytes += packet.ToBytes().Length; - m_NeedAck[packet.Header.Sequence] = new AckData(packet, - item.Identifier); - } - } + lock (m_NeedAck) + { + // We want to see that packet arrive if it's reliable + if (packet.Header.Reliable) + { + m_UnackedBytes += packet.ToBytes().Length; + m_NeedAck[packet.Header.Sequence] = new AckData(packet, + item.Identifier); + } + } + } // Actually make the byte array and send it try