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(-) 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