aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs15
1 files changed, 14 insertions, 1 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs b/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs
index 81f3922..a8785a6 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs
@@ -327,11 +327,17 @@ namespace OpenSim.Region.ClientStack.LindenUDP
327 // we've hit the throttle limit or there's no more packets to send 327 // we've hit the throttle limit or there's no more packets to send
328 lock (this) 328 lock (this)
329 { 329 {
330 // this variable will be true if there was work done in the last execution of the
331 // loop, since each pass through the loop checks the queue length, we no longer
332 // need the check on entering the loop
333 bool qchanged = true;
330 ResetCounters(); 334 ResetCounters();
331 // m_log.Info("[THROTTLE]: Entering Throttle"); 335 // m_log.Info("[THROTTLE]: Entering Throttle");
332 while (TotalThrottle.UnderLimit() && PacketsWaiting() && 336 while (TotalThrottle.UnderLimit() && qchanged &&
333 (throttleLoops <= MaxThrottleLoops)) 337 (throttleLoops <= MaxThrottleLoops))
334 { 338 {
339 qchanged = false; // We will break out of the loop if no work was accomplished
340
335 throttleLoops++; 341 throttleLoops++;
336 //Now comes the fun part.. we dump all our elements into m_packetQueue that we've saved up. 342 //Now comes the fun part.. we dump all our elements into m_packetQueue that we've saved up.
337 if ((ResendOutgoingPacketQueue.Count > 0) && ResendThrottle.UnderLimit()) 343 if ((ResendOutgoingPacketQueue.Count > 0) && ResendThrottle.UnderLimit())
@@ -341,6 +347,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
341 SendQueue.Enqueue(qpack); 347 SendQueue.Enqueue(qpack);
342 TotalThrottle.AddBytes(qpack.Packet.ToBytes().Length); 348 TotalThrottle.AddBytes(qpack.Packet.ToBytes().Length);
343 ResendThrottle.AddBytes(qpack.Packet.ToBytes().Length); 349 ResendThrottle.AddBytes(qpack.Packet.ToBytes().Length);
350 qchanged = true;
344 } 351 }
345 352
346 if ((LandOutgoingPacketQueue.Count > 0) && LandThrottle.UnderLimit()) 353 if ((LandOutgoingPacketQueue.Count > 0) && LandThrottle.UnderLimit())
@@ -350,6 +357,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
350 SendQueue.Enqueue(qpack); 357 SendQueue.Enqueue(qpack);
351 TotalThrottle.AddBytes(qpack.Packet.ToBytes().Length); 358 TotalThrottle.AddBytes(qpack.Packet.ToBytes().Length);
352 LandThrottle.AddBytes(qpack.Packet.ToBytes().Length); 359 LandThrottle.AddBytes(qpack.Packet.ToBytes().Length);
360 qchanged = true;
353 } 361 }
354 362
355 if ((WindOutgoingPacketQueue.Count > 0) && WindThrottle.UnderLimit()) 363 if ((WindOutgoingPacketQueue.Count > 0) && WindThrottle.UnderLimit())
@@ -359,6 +367,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
359 SendQueue.Enqueue(qpack); 367 SendQueue.Enqueue(qpack);
360 TotalThrottle.AddBytes(qpack.Packet.ToBytes().Length); 368 TotalThrottle.AddBytes(qpack.Packet.ToBytes().Length);
361 WindThrottle.AddBytes(qpack.Packet.ToBytes().Length); 369 WindThrottle.AddBytes(qpack.Packet.ToBytes().Length);
370 qchanged = true;
362 } 371 }
363 372
364 if ((CloudOutgoingPacketQueue.Count > 0) && CloudThrottle.UnderLimit()) 373 if ((CloudOutgoingPacketQueue.Count > 0) && CloudThrottle.UnderLimit())
@@ -368,6 +377,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
368 SendQueue.Enqueue(qpack); 377 SendQueue.Enqueue(qpack);
369 TotalThrottle.AddBytes(qpack.Packet.ToBytes().Length); 378 TotalThrottle.AddBytes(qpack.Packet.ToBytes().Length);
370 CloudThrottle.AddBytes(qpack.Packet.ToBytes().Length); 379 CloudThrottle.AddBytes(qpack.Packet.ToBytes().Length);
380 qchanged = true;
371 } 381 }
372 382
373 if ((TaskOutgoingPacketQueue.Count > 0 || TaskLowpriorityPacketQueue.Count > 0) && TaskThrottle.UnderLimit()) 383 if ((TaskOutgoingPacketQueue.Count > 0 || TaskLowpriorityPacketQueue.Count > 0) && TaskThrottle.UnderLimit())
@@ -385,6 +395,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
385 } 395 }
386 TotalThrottle.AddBytes(qpack.Packet.ToBytes().Length); 396 TotalThrottle.AddBytes(qpack.Packet.ToBytes().Length);
387 TaskThrottle.AddBytes(qpack.Packet.ToBytes().Length); 397 TaskThrottle.AddBytes(qpack.Packet.ToBytes().Length);
398 qchanged = true;
388 } 399 }
389 400
390 if ((TextureOutgoingPacketQueue.Count > 0) && TextureThrottle.UnderLimit()) 401 if ((TextureOutgoingPacketQueue.Count > 0) && TextureThrottle.UnderLimit())
@@ -394,6 +405,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
394 SendQueue.Enqueue(qpack); 405 SendQueue.Enqueue(qpack);
395 TotalThrottle.AddBytes(qpack.Packet.ToBytes().Length); 406 TotalThrottle.AddBytes(qpack.Packet.ToBytes().Length);
396 TextureThrottle.AddBytes(qpack.Packet.ToBytes().Length); 407 TextureThrottle.AddBytes(qpack.Packet.ToBytes().Length);
408 qchanged = true;
397 } 409 }
398 410
399 if ((AssetOutgoingPacketQueue.Count > 0) && AssetThrottle.UnderLimit()) 411 if ((AssetOutgoingPacketQueue.Count > 0) && AssetThrottle.UnderLimit())
@@ -403,6 +415,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
403 SendQueue.Enqueue(qpack); 415 SendQueue.Enqueue(qpack);
404 TotalThrottle.AddBytes(qpack.Packet.ToBytes().Length); 416 TotalThrottle.AddBytes(qpack.Packet.ToBytes().Length);
405 AssetThrottle.AddBytes(qpack.Packet.ToBytes().Length); 417 AssetThrottle.AddBytes(qpack.Packet.ToBytes().Length);
418 qchanged = true;
406 } 419 }
407 } 420 }
408 // m_log.Info("[THROTTLE]: Processed " + throttleLoops + " packets"); 421 // m_log.Info("[THROTTLE]: Processed " + throttleLoops + " packets");