From 668723fab31976895ceb42a372cfff7ed5689a9d Mon Sep 17 00:00:00 2001
From: Melanie
Date: Sun, 15 Jul 2012 23:01:58 +0200
Subject: Remove instrumentation and fix the message delivery issue

---
 .../Region/ClientStack/Linden/UDP/LLUDPServer.cs   | 52 ++++++++++++----------
 1 file changed, 28 insertions(+), 24 deletions(-)

diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index c807260..46337b3 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -698,42 +698,46 @@ namespace OpenSim.Region.ClientStack.LindenUDP
 
             #region Packet to Client Mapping
 
-            // UseCircuitCode handling
-            if (packet.Type == PacketType.UseCircuitCode)
+            // If there is already a client for this endpoint, don't process UseCircuitCode
+            IClientAPI client = null;
+            if (!m_scene.TryGetClient(address, out client))
             {
-                lock (m_pendingCache)
+                // UseCircuitCode handling
+                if (packet.Type == PacketType.UseCircuitCode)
                 {
-                    if (m_pendingCache.Contains(address))
-                        return;
+                    // And if there is a UseCircuitCode pending, also drop it
+                    lock (m_pendingCache)
+                    {
+                        if (m_pendingCache.Contains(address))
+                            return;
 
-                    m_pendingCache.AddOrUpdate(address, new Queue<UDPPacketBuffer>(), 60);
-                }
+                        m_pendingCache.AddOrUpdate(address, new Queue<UDPPacketBuffer>(), 60);
+                    }
 
-                object[] array = new object[] { buffer, packet };
+                    object[] array = new object[] { buffer, packet };
 
-                Util.FireAndForget(HandleUseCircuitCode, array);
+                    Util.FireAndForget(HandleUseCircuitCode, array);
 
-                return;
+                    return;
+                }
             }
 
-            // Determine which agent this packet came from
-            IClientAPI client;
-            if (!m_scene.TryGetClient(address, out client) || !(client is LLClientView))
+            // If this is a pending connection, enqueue, don't process yet
+            lock (m_pendingCache)
             {
-                lock (m_pendingCache)
+                Queue<UDPPacketBuffer> queue;
+                if (m_pendingCache.TryGetValue(address, out queue))
                 {
-                    Queue<UDPPacketBuffer> queue;
-                    if (m_pendingCache.TryGetValue(address, out queue))
-                    {
-                        m_log.DebugFormat("[LLUDPSERVER]: Enqueued a {0} packet into the pending queue", packet.Type);
-                        queue.Enqueue(buffer);
-                    }
-                    else
-                    {
-                        m_log.Debug("[LLUDPSERVER]: Received a " + packet.Type + " packet from an unrecognized source: " + address + " in " + m_scene.RegionInfo.RegionName);
-                    }
+                    //m_log.DebugFormat("[LLUDPSERVER]: Enqueued a {0} packet into the pending queue", packet.Type);
+                    queue.Enqueue(buffer);
+                    return;
                 }
+            }
 
+            // Determine which agent this packet came from
+            if (client == null || !(client is LLClientView))
+            {
+                //m_log.Debug("[LLUDPSERVER]: Received a " + packet.Type + " packet from an unrecognized source: " + address + " in " + m_scene.RegionInfo.RegionName);
                 return;
             }
 
-- 
cgit v1.1