From e8e0ce5fc6bf26021a2ec03fc03cb33a4581a52a Mon Sep 17 00:00:00 2001 From: Dr Scofield Date: Thu, 25 Jun 2009 07:59:47 +0000 Subject: changing DropSend()'s foreach loop so that it does not copy the LLQueItem m_NeedAck queue each time. --- OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs b/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs index a1a8e00..7e3d919 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLPacketHandler.cs @@ -741,16 +741,22 @@ namespace OpenSim.Region.ClientStack.LindenUDP private void DropResend(Object id) { - foreach (LLQueItem data in new List(m_NeedAck.Values)) + LLQueItem d = null; + + foreach (LLQueItem data in m_NeedAck.Values) { if (data.Identifier != null && data.Identifier == id) { - m_NeedAck.Remove(data.Packet.Header.Sequence); - m_PacketQueue.Cancel(data.Sequence); - PacketPool.Instance.ReturnPacket(data.Packet); - return; + d = data; + break; } } + + if (null == d) return; + + m_NeedAck.Remove(d.Packet.Header.Sequence); + m_PacketQueue.Cancel(d.Sequence); + PacketPool.Instance.ReturnPacket(d.Packet); } private void TriggerOnPacketDrop(Packet packet, Object id) -- cgit v1.1