* 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 followprioritization
parent
3ba36bb4d8
commit
9b342d3e0d
|
@ -3131,9 +3131,6 @@ 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)
|
||||
|
@ -3147,10 +3144,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
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)
|
||||
|
|
|
@ -776,9 +776,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
{
|
||||
QueueEmpty handlerQueueEmpty = OnQueueEmpty;
|
||||
|
||||
if (handlerQueueEmpty == null)
|
||||
return;
|
||||
|
||||
if (handlerQueueEmpty != null)
|
||||
handlerQueueEmpty(queue);
|
||||
}
|
||||
|
||||
|
|
|
@ -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,9 +500,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
{
|
||||
QueueEmpty handlerQueueEmpty = OnQueueEmpty;
|
||||
|
||||
if (handlerQueueEmpty == null)
|
||||
return;
|
||||
|
||||
if (handlerQueueEmpty != null)
|
||||
handlerQueueEmpty(queue);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue