From 870bbcfc6c264c515ac660837d16ccad4e59ac64 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Mon, 13 Dec 2010 09:42:27 -0800
Subject: This may have been the biggest, baddest bug in OpenSim ever...
confusion between bytes per second and bytes per millisecond.
---
OpenSim/Region/ClientStack/LindenUDP/TokenBucket.cs | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/ClientStack/LindenUDP/TokenBucket.cs b/OpenSim/Region/ClientStack/LindenUDP/TokenBucket.cs
index bdbd284..4d9ca09 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/TokenBucket.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/TokenBucket.cs
@@ -119,6 +119,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
#endregion Properties
+ // To help debugging
+ private static int idCount = 0;
+ private int id;
+
///
/// Default constructor
///
@@ -134,6 +138,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
MaxBurst = maxBurst;
DripRate = dripRate;
lastDrip = Environment.TickCount & Int32.MaxValue;
+ id = idCount++;
}
///
@@ -191,6 +196,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
if (tokensPerMS == 0)
{
content = maxBurst;
+ //Console.WriteLine("XXX (" + id + ") content = maxBurst and maxBurst = " + maxBurst);
return true;
}
else
@@ -205,11 +211,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
return false;
}
- int dripAmount = deltaMS * tokensPerMS;
-
+ // dripAmpount here is in bytes per millisecond
+ int dripAmount = deltaMS * tokensPerMS;
+ // but content is in bytes per second, so let's multiply by 1000
+ dripAmount = dripAmount * 1000;
content = Math.Min(content + dripAmount, maxBurst);
lastDrip = now;
+ //Console.WriteLine("XXX (" + id + ") deltaMS=" + deltaMS + "; tokensPerMS=" + tokensPerMS + "; content=" + content + "; dripAmount=" + dripAmount);
return true;
}
}
--
cgit v1.1