From 4ccac88cf662b8f50afeaea13451550ae4c0b21e Mon Sep 17 00:00:00 2001
From: Justin Clarke Casey
Date: Fri, 17 Oct 2008 20:30:50 +0000
Subject: * Don't worry about trying to populate the other dictionaries if a
client's circuitcode is already found in the first one
---
.../Region/ClientStack/LindenUDP/LLUDPServer.cs | 35 ++++++++++++++--------
1 file changed, 22 insertions(+), 13 deletions(-)
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
index 01a4dd6..a4a6b93 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
@@ -46,12 +46,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+ ///
+ /// The client circuits established with this UDP server. If a client exists here we can also assume that
+ /// it is populated in clientCircuits_reverse and proxyCircuits (if relevant)
+ ///
protected Dictionary clientCircuits = new Dictionary();
-
- //public Dictionary clientCircuits_reverse = new Dictionary();
public Hashtable clientCircuits_reverse = Hashtable.Synchronized(new Hashtable());
-
protected Dictionary proxyCircuits = new Dictionary();
+
private Socket m_socket;
protected IPEndPoint ServerIncoming;
protected byte[] RecvBuffer = new byte[4096];
@@ -360,7 +362,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
{
//Slave regions don't accept new clients
if (m_localScene.Region_Status != RegionStatus.SlaveScene)
- {
+ {
+ bool foundExistingCircuit = false;
+
lock (clientCircuits)
{
if (!clientCircuits.ContainsKey(epSender))
@@ -370,20 +374,25 @@ namespace OpenSim.Region.ClientStack.LindenUDP
useCircuit.CircuitCode.ID, useCircuit.CircuitCode.Code);
clientCircuits.Add(epSender, useCircuit.CircuitCode.Code);
+
+ foundExistingCircuit = true;
}
}
- // This doesn't need locking as it's synchronized data
- if (!clientCircuits_reverse.ContainsKey(useCircuit.CircuitCode.Code))
- clientCircuits_reverse.Add(useCircuit.CircuitCode.Code, epSender);
-
- lock (proxyCircuits)
+ if (!foundExistingCircuit)
{
- if (!proxyCircuits.ContainsKey(useCircuit.CircuitCode.Code))
- proxyCircuits.Add(useCircuit.CircuitCode.Code, epProxy);
- }
+ // This doesn't need locking as it's synchronized data
+ if (!clientCircuits_reverse.ContainsKey(useCircuit.CircuitCode.Code))
+ clientCircuits_reverse.Add(useCircuit.CircuitCode.Code, epSender);
- PacketServer.AddNewClient(epSender, useCircuit, m_assetCache, m_circuitManager, epProxy);
+ lock (proxyCircuits)
+ {
+ if (!proxyCircuits.ContainsKey(useCircuit.CircuitCode.Code))
+ proxyCircuits.Add(useCircuit.CircuitCode.Code, epProxy);
+ }
+
+ PacketServer.AddNewClient(epSender, useCircuit, m_assetCache, m_circuitManager, epProxy);
+ }
}
// Ack the UseCircuitCode packet
--
cgit v1.1