diff options
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs | 35 |
1 files changed, 14 insertions, 21 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs index 18d5606..d811b64 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs | |||
@@ -308,8 +308,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
308 | 308 | ||
309 | 309 | ||
310 | 310 | ||
311 | // private ExpiringCache<IPEndPoint, Queue<UDPPacketBuffer>> m_pendingCache = new ExpiringCache<IPEndPoint, Queue<UDPPacketBuffer>>(); | 311 | private ExpiringCache<IPEndPoint, Queue<UDPPacketBuffer>> m_pendingCache = new ExpiringCache<IPEndPoint, Queue<UDPPacketBuffer>>(); |
312 | private Dictionary<IPEndPoint, Queue<UDPPacketBuffer>> m_pendingCache = new Dictionary<IPEndPoint, Queue<UDPPacketBuffer>>(); | 312 | |
313 | /// <summary> | 313 | /// <summary> |
314 | /// Event used to signal when queued packets are available for sending. | 314 | /// Event used to signal when queued packets are available for sending. |
315 | /// </summary> | 315 | /// </summary> |
@@ -1416,12 +1416,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1416 | // And if there is a UseCircuitCode pending, also drop it | 1416 | // And if there is a UseCircuitCode pending, also drop it |
1417 | lock (m_pendingCache) | 1417 | lock (m_pendingCache) |
1418 | { | 1418 | { |
1419 | // if (m_pendingCache.Contains(endPoint)) | 1419 | if (m_pendingCache.Contains(endPoint)) |
1420 | if (m_pendingCache.ContainsKey(endPoint)) | ||
1421 | return; | 1420 | return; |
1422 | 1421 | ||
1423 | // m_pendingCache.AddOrUpdate(endPoint, new Queue<UDPPacketBuffer>(), 60); | 1422 | m_pendingCache.AddOrUpdate(endPoint, new Queue<UDPPacketBuffer>(), 60); |
1424 | m_pendingCache.Add(endPoint, new Queue<UDPPacketBuffer>()); | ||
1425 | } | 1423 | } |
1426 | 1424 | ||
1427 | // We need to copy the endpoint so that it doesn't get changed when another thread reuses the | 1425 | // We need to copy the endpoint so that it doesn't get changed when another thread reuses the |
@@ -1767,7 +1765,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1767 | uccp.CircuitCode.SessionID, | 1765 | uccp.CircuitCode.SessionID, |
1768 | endPoint, | 1766 | endPoint, |
1769 | sessionInfo); | 1767 | sessionInfo); |
1770 | 1768 | ||
1769 | // Now we know we can handle more data | ||
1770 | Thread.Sleep(200); | ||
1771 | |||
1771 | // Obtain the pending queue and remove it from the cache | 1772 | // Obtain the pending queue and remove it from the cache |
1772 | Queue<UDPPacketBuffer> queue = null; | 1773 | Queue<UDPPacketBuffer> queue = null; |
1773 | 1774 | ||
@@ -1785,17 +1786,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1785 | m_log.DebugFormat("[LLUDPSERVER]: Client created, processing pending queue, {0} entries", queue.Count); | 1786 | m_log.DebugFormat("[LLUDPSERVER]: Client created, processing pending queue, {0} entries", queue.Count); |
1786 | 1787 | ||
1787 | // Reinject queued packets | 1788 | // Reinject queued packets |
1788 | if (queue != null) | 1789 | while (queue.Count > 0) |
1789 | { | 1790 | { |
1790 | while (queue.Count > 0) | 1791 | UDPPacketBuffer buf = queue.Dequeue(); |
1791 | { | 1792 | PacketReceived(buf); |
1792 | UDPPacketBuffer buf = queue.Dequeue(); | ||
1793 | PacketReceived(buf); | ||
1794 | } | ||
1795 | |||
1796 | queue = null; | ||
1797 | } | 1793 | } |
1798 | 1794 | ||
1795 | queue = null; | ||
1796 | |||
1799 | // Send ack straight away to let the viewer know that the connection is active. | 1797 | // Send ack straight away to let the viewer know that the connection is active. |
1800 | // The client will be null if it already exists (e.g. if on a region crossing the client sends a use | 1798 | // The client will be null if it already exists (e.g. if on a region crossing the client sends a use |
1801 | // circuit code to the existing child agent. This is not particularly obvious. | 1799 | // circuit code to the existing child agent. This is not particularly obvious. |
@@ -1828,10 +1826,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1828 | } | 1826 | } |
1829 | catch (Exception e) | 1827 | catch (Exception e) |
1830 | { | 1828 | { |
1831 | // this may already be done.. or not.. | ||
1832 | lock (m_pendingCache) | ||
1833 | m_pendingCache.Remove(endPoint); | ||
1834 | |||
1835 | m_log.ErrorFormat( | 1829 | m_log.ErrorFormat( |
1836 | "[LLUDPSERVER]: UseCircuitCode handling from endpoint {0}, client {1} {2} failed. Exception {3}{4}", | 1830 | "[LLUDPSERVER]: UseCircuitCode handling from endpoint {0}, client {1} {2} failed. Exception {3}{4}", |
1837 | endPoint != null ? endPoint.ToString() : "n/a", | 1831 | endPoint != null ? endPoint.ToString() : "n/a", |
@@ -2069,8 +2063,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
2069 | client.Kick("Simulator logged you out due to connection timeout."); | 2063 | client.Kick("Simulator logged you out due to connection timeout."); |
2070 | } | 2064 | } |
2071 | 2065 | ||
2072 | if (!m_scene.CloseAgent(client.AgentId, true)) | 2066 | m_scene.CloseAgent(client.AgentId, true); |
2073 | client.Close(true,true); | ||
2074 | } | 2067 | } |
2075 | 2068 | ||
2076 | private void IncomingPacketHandler() | 2069 | private void IncomingPacketHandler() |