From 9b342d3e0d85e64e143b9fe1010e4e27135e24ec Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Fri, 2 Oct 2009 12:00:42 -0700 Subject: * Changed the flush logic to drop packets in non-transactional streams, and to not fire any "put more data in the queues" callbacks * Minor tweaks to code formatting to make the callback chain for packet queuing easier to follow --- .../Region/ClientStack/LindenUDP/LLClientView.cs | 14 ++---- .../ClientStack/LindenUDP/LLPacketHandler.cs | 6 +-- .../Region/ClientStack/LindenUDP/LLPacketQueue.cs | 58 +++++----------------- 3 files changed, 19 insertions(+), 59 deletions(-) (limited to 'OpenSim') diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index f05c490..43d29fd 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -3131,26 +3131,20 @@ namespace OpenSim.Region.ClientStack.LindenUDP } } - // Unlike the other timers, this one is only started after - // the first request is seen. - void HandleQueueEmpty(ThrottleOutPacketType queue) { switch (queue) { - case ThrottleOutPacketType.Texture: - ProcessTextureRequests(); - break; + case ThrottleOutPacketType.Texture: + ProcessTextureRequests(); + break; } } void ProcessTextureRequests() { if (m_imageManager != null) - { - m_imageManager.ProcessImageQueue(m_textureSendLimit, - m_textureDataLimit); - } + m_imageManager.ProcessImageQueue(m_textureSendLimit, m_textureDataLimit); } void ProcessPrimFullUpdates(object sender, ElapsedEventArgs e) diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs b/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs index 37f6ca7..e98a360 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs @@ -776,10 +776,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP { QueueEmpty handlerQueueEmpty = OnQueueEmpty; - if (handlerQueueEmpty == null) - return; - - handlerQueueEmpty(queue); + if (handlerQueueEmpty != null) + handlerQueueEmpty(queue); } // Convert the packet to bytes and stuff it onto the send queue diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs b/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs index 8484846..0f1acb1 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLPacketQueue.cs @@ -273,55 +273,25 @@ namespace OpenSim.Region.ClientStack.LindenUDP { lock (this) { - while (PacketsWaiting()) + // These categories do not contain transactional packets so we can safely drop any pending data in them + LandOutgoingPacketQueue.Clear(); + WindOutgoingPacketQueue.Clear(); + CloudOutgoingPacketQueue.Clear(); + TextureOutgoingPacketQueue.Clear(); + AssetOutgoingPacketQueue.Clear(); + + // Now comes the fun part.. we dump all remaining resend and task packets into the send queue + while (ResendOutgoingPacketQueue.Count > 0 || TaskOutgoingPacketQueue.Count > 0 || TaskLowpriorityPacketQueue.Count > 0) { - //Now comes the fun part.. we dump all our elements into m_packetQueue that we've saved up. if (ResendOutgoingPacketQueue.Count > 0) - { SendQueue.Enqueue(ResendOutgoingPacketQueue.Dequeue()); - } - if (LandOutgoingPacketQueue.Count > 0) - { - SendQueue.Enqueue(LandOutgoingPacketQueue.Dequeue()); - TriggerOnQueueEmpty(ThrottleOutPacketType.Land); - } - if (WindOutgoingPacketQueue.Count > 0) - { - SendQueue.Enqueue(WindOutgoingPacketQueue.Dequeue()); - TriggerOnQueueEmpty(ThrottleOutPacketType.Wind); - } - if (CloudOutgoingPacketQueue.Count > 0) - { - SendQueue.Enqueue(CloudOutgoingPacketQueue.Dequeue()); - TriggerOnQueueEmpty(ThrottleOutPacketType.Cloud); - } - bool tasksSent = false; + if (TaskOutgoingPacketQueue.Count > 0) - { - tasksSent = true; SendQueue.PriorityEnqueue(TaskOutgoingPacketQueue.Dequeue()); - } + if (TaskLowpriorityPacketQueue.Count > 0) - { - tasksSent = true; SendQueue.Enqueue(TaskLowpriorityPacketQueue.Dequeue()); - } - if (tasksSent) - { - TriggerOnQueueEmpty(ThrottleOutPacketType.Task); - } - if (TextureOutgoingPacketQueue.Count > 0) - { - SendQueue.Enqueue(TextureOutgoingPacketQueue.Dequeue()); - TriggerOnQueueEmpty(ThrottleOutPacketType.Texture); - } - if (AssetOutgoingPacketQueue.Count > 0) - { - SendQueue.Enqueue(AssetOutgoingPacketQueue.Dequeue()); - TriggerOnQueueEmpty(ThrottleOutPacketType.Asset); - } } - // m_log.Info("[THROTTLE]: Processed " + throttleLoops + " packets"); } } @@ -530,10 +500,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP { QueueEmpty handlerQueueEmpty = OnQueueEmpty; - if (handlerQueueEmpty == null) - return; - - handlerQueueEmpty(queue); + if (handlerQueueEmpty != null) + handlerQueueEmpty(queue); } private void ThrottleTimerElapsed(object sender, ElapsedEventArgs e) -- cgit v1.1