aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJustin Clarke Casey2008-10-17 19:08:53 +0000
committerJustin Clarke Casey2008-10-17 19:08:53 +0000
commit84492fee01d786cb28bed3a91148b1be9168a54a (patch)
tree1c5c042f3a641c8b242ba870acd55cbe78cc72f7
parentFixed llDeleteSubList; the indices were swapped (Fixes Mantis#2399). (diff)
downloadopensim-SC-84492fee01d786cb28bed3a91148b1be9168a54a.zip
opensim-SC-84492fee01d786cb28bed3a91148b1be9168a54a.tar.gz
opensim-SC-84492fee01d786cb28bed3a91148b1be9168a54a.tar.bz2
opensim-SC-84492fee01d786cb28bed3a91148b1be9168a54a.tar.xz
* Temporarily resume creation of IPEndPoint on every call
* This widened what I think is an existing race condition where asynchronous recieves could potentially stomp on each other's end points (though this must occur very rarely, if at all, in reality)
-rw-r--r--OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs12
1 files changed, 7 insertions, 5 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
index 2a907cc..26a77e4 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs
@@ -176,10 +176,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
176 protected virtual void OnReceivedData(IAsyncResult result) 176 protected virtual void OnReceivedData(IAsyncResult result)
177 { 177 {
178 Packet packet = null; 178 Packet packet = null;
179
180 int numBytes = 1; 179 int numBytes = 1;
181
182 bool ok = false; 180 bool ok = false;
181 reusedEpSender = new IPEndPoint(IPAddress.Any, 0);
183 182
184 try 183 try
185 { 184 {
@@ -451,9 +450,12 @@ namespace OpenSim.Region.ClientStack.LindenUDP
451 { 450 {
452 // find the endpoint for this circuit 451 // find the endpoint for this circuit
453 EndPoint sendto; 452 EndPoint sendto;
454 try { 453 try
454 {
455 sendto = (EndPoint)clientCircuits_reverse[circuitcode]; 455 sendto = (EndPoint)clientCircuits_reverse[circuitcode];
456 } catch { 456 }
457 catch
458 {
457 // Exceptions here mean there is no circuit 459 // Exceptions here mean there is no circuit
458 m_log.Warn("[CLIENT]: Circuit not found, not sending packet"); 460 m_log.Warn("[CLIENT]: Circuit not found, not sending packet");
459 return; 461 return;
@@ -525,7 +527,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
525 if (!clientCircuits.ContainsKey(userEP)) 527 if (!clientCircuits.ContainsKey(userEP))
526 clientCircuits.Add(userEP, useCircuit.CircuitCode.Code); 528 clientCircuits.Add(userEP, useCircuit.CircuitCode.Code);
527 else 529 else
528 m_log.Error("[CLIENT]: clientCircuits already contans entry for user " + useCircuit.CircuitCode.Code + ". NOT adding."); 530 m_log.Error("[CLIENT]: clientCircuits already contains entry for user " + useCircuit.CircuitCode.Code + ". NOT adding.");
529 } 531 }
530 532
531 // This data structure is synchronized, so we don't need the lock 533 // This data structure is synchronized, so we don't need the lock