From 95a3d6372d5cb6d0b702ecc26f2433b19b69c323 Mon Sep 17 00:00:00 2001
From: Justin Clarke Casey
Date: Wed, 1 Oct 2008 17:18:20 +0000
Subject: * Fix bug in LLPacketHandler where the tickcount when a packet was
approximately sent was not being stored in the ack record * This meant that
acks were being sent out every 250ms when the ack timer fired, rather than
when they had actually aged past m_ResendTimeout
---
.../ClientStack/LindenUDP/LLPacketHandler.cs | 28 +++++++++++++++-------
.../Region/ClientStack/LindenUDP/LLPacketServer.cs | 2 +-
2 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs b/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs
index d57321e..0608b7f 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs
@@ -78,8 +78,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
public class LLPacketHandler : IPacketHandler
{
-// private static readonly ILog m_log =
-// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+ //private static readonly ILog m_log =
+ // LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
// Packet queues
//
@@ -102,10 +102,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
//
private class AckData
{
- public AckData(Packet packet, Object identifier)
+ public AckData(Packet packet, Object identifier, int tickCount)
{
Packet = packet;
Identifier = identifier;
+ TickCount = tickCount;
}
public Packet Packet;
@@ -355,7 +356,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{
// Resend the packet. Set the packet's tick count to
// now, and keep it marked as resent.
- //
+ //m_log.DebugFormat(
+ // "[CLIENT]: Resending unacked packet number {0} after {1}ms",
+ // packet.Header.Sequence, now - data.TickCount);
+
packet.Header.Resent = true;
QueuePacket(packet, ThrottleOutPacketType.Resend,
data.Identifier);
@@ -372,7 +376,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
if (!m_ReliableIsImportant || !packet.Header.Reliable)
{
if (!m_ImportantPackets.Contains(packet.Type))
+ {
m_NeedAck.Remove(packet.Header.Sequence);
+
+ //m_log.DebugFormat(
+ // "[CLIENT]: Discarding ack requirement for packet number {0}",
+ // packet.Header.Sequence);
+ }
TriggerOnPacketDrop(packet, data.Identifier);
@@ -611,6 +621,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
lock (m_NeedAck)
{
+ //m_log.DebugFormat("[CLIENT]: Received ack for packet sequence number {0}", id);
+
if (!m_NeedAck.TryGetValue(id, out data))
return;
@@ -691,7 +703,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{
}
- m_NeedAck.Add(key, new AckData(packet, null));
+ m_NeedAck.Add(key, new AckData(packet, null, System.Environment.TickCount));
}
m_Sequence = info.sequence;
@@ -741,8 +753,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{
Packet packet = item.Packet;
- // Keep track of when this packet was sent out
- item.TickCount = System.Environment.TickCount;
// Assign sequence number here to prevent out of order packets
if (packet.Header.Sequence == 0)
@@ -755,8 +765,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
if (packet.Header.Reliable)
{
m_UnackedBytes += packet.ToBytes().Length;
+
+ // Keep track of when this packet was sent out
m_NeedAck[packet.Header.Sequence] = new AckData(packet,
- item.Identifier);
+ item.Identifier, System.Environment.TickCount);
}
}
}
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLPacketServer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLPacketServer.cs
index 5020558..1713755 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLPacketServer.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLPacketServer.cs
@@ -137,7 +137,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
///
- ///
+ /// Send a packet to the given circuit
///
///
///
--
cgit v1.1