diff options
author | John Hurliman | 2009-10-13 16:53:19 -0700 |
---|---|---|
committer | John Hurliman | 2009-10-13 16:53:19 -0700 |
commit | 395a8680c3633ca131e7481f765517311ef51710 (patch) | |
tree | e9c3634c3c37e6595b7743da88b236c12fc81422 /OpenSim/Region/ClientStack | |
parent | * Rewrote ClientManager to remove Lindenisms from OpenSim core, improve perfo... (diff) | |
download | opensim-SC-395a8680c3633ca131e7481f765517311ef51710.zip opensim-SC-395a8680c3633ca131e7481f765517311ef51710.tar.gz opensim-SC-395a8680c3633ca131e7481f765517311ef51710.tar.bz2 opensim-SC-395a8680c3633ca131e7481f765517311ef51710.tar.xz |
* Fixed a bug where clients were being added to ClientManager twice
* Changed the ClientManager interface to reduce potential errors with duplicate or mismatched keys
* Added IClientAPI.RemoteEndPoint, which can (hopefully) eventually replace IClientAPI.CircuitCode
* Changed the order of operations during client shutdown
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 36 | ||||
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLImageManager.cs | 44 | ||||
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs | 9 |
3 files changed, 41 insertions, 48 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 86d0112..aecb362 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -411,38 +411,34 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
411 | "[CLIENT]: Close has been called for {0} attached to scene {1}", | 411 | "[CLIENT]: Close has been called for {0} attached to scene {1}", |
412 | Name, m_scene.RegionInfo.RegionName); | 412 | Name, m_scene.RegionInfo.RegionName); |
413 | 413 | ||
414 | // Remove ourselves from the scene | 414 | // Send the STOP packet |
415 | m_scene.ClientManager.Remove(m_agentId, m_udpClient.RemoteEndPoint); | 415 | DisableSimulatorPacket disable = (DisableSimulatorPacket)PacketPool.Instance.GetPacket(PacketType.DisableSimulator); |
416 | OutPacket(disable, ThrottleOutPacketType.Unknown); | ||
417 | |||
418 | IsActive = false; | ||
416 | 419 | ||
420 | // Shutdown the image manager | ||
417 | if (m_imageManager != null) | 421 | if (m_imageManager != null) |
418 | { | ||
419 | m_imageManager.Close(); | 422 | m_imageManager.Close(); |
420 | m_imageManager = null; | ||
421 | } | ||
422 | |||
423 | if (m_udpServer != null) | ||
424 | { | ||
425 | m_udpServer.Flush(); | ||
426 | } | ||
427 | 423 | ||
424 | // Fire the callback for this connection closing | ||
428 | if (OnConnectionClosed != null) | 425 | if (OnConnectionClosed != null) |
429 | OnConnectionClosed(this); | 426 | OnConnectionClosed(this); |
430 | 427 | ||
431 | CloseCleanup(); | 428 | // Flush all of the packets out of the UDP server for this client |
432 | } | 429 | if (m_udpServer != null) |
430 | m_udpServer.Flush(m_udpClient); | ||
433 | 431 | ||
434 | private void CloseCleanup() | 432 | // Remove ourselves from the scene |
435 | { | ||
436 | m_scene.RemoveClient(AgentId); | 433 | m_scene.RemoveClient(AgentId); |
434 | m_scene.ClientManager.Remove(this); | ||
437 | 435 | ||
438 | //m_log.InfoFormat("[CLIENTVIEW] Memory pre GC {0}", System.GC.GetTotalMemory(false)); | 436 | //m_log.InfoFormat("[CLIENTVIEW] Memory pre GC {0}", System.GC.GetTotalMemory(false)); |
437 | //GC.Collect(); | ||
439 | //m_log.InfoFormat("[CLIENTVIEW] Memory post GC {0}", System.GC.GetTotalMemory(true)); | 438 | //m_log.InfoFormat("[CLIENTVIEW] Memory post GC {0}", System.GC.GetTotalMemory(true)); |
440 | 439 | ||
441 | // Send the STOP packet | 440 | // FIXME: Is this still necessary? |
442 | DisableSimulatorPacket disable = (DisableSimulatorPacket)PacketPool.Instance.GetPacket(PacketType.DisableSimulator); | 441 | //Thread.Sleep(2000); |
443 | OutPacket(disable, ThrottleOutPacketType.Unknown); | ||
444 | |||
445 | Thread.Sleep(2000); | ||
446 | 442 | ||
447 | // Shut down timers. Thread Context of this method is murky. Lock all timers | 443 | // Shut down timers. Thread Context of this method is murky. Lock all timers |
448 | if (m_avatarTerseUpdateTimer.Enabled) | 444 | if (m_avatarTerseUpdateTimer.Enabled) |
@@ -459,8 +455,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
459 | // We need to do this over grid communications | 455 | // We need to do this over grid communications |
460 | //m_scene.CloseAllAgents(CircuitCode); | 456 | //m_scene.CloseAllAgents(CircuitCode); |
461 | 457 | ||
462 | IsActive = false; | ||
463 | |||
464 | m_avatarTerseUpdateTimer.Dispose(); | 458 | m_avatarTerseUpdateTimer.Dispose(); |
465 | m_primTerseUpdateTimer.Dispose(); | 459 | m_primTerseUpdateTimer.Dispose(); |
466 | m_primFullUpdateTimer.Dispose(); | 460 | m_primFullUpdateTimer.Dispose(); |
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLImageManager.cs b/OpenSim/Region/ClientStack/LindenUDP/LLImageManager.cs index 343f537..8469ba6 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLImageManager.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLImageManager.cs | |||
@@ -167,39 +167,39 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
167 | J2KImage imagereq; | 167 | J2KImage imagereq; |
168 | int numCollected = 0; | 168 | int numCollected = 0; |
169 | 169 | ||
170 | //lock (m_syncRoot) | 170 | m_lastloopprocessed = DateTime.Now.Ticks; |
171 | //{ | 171 | |
172 | m_lastloopprocessed = DateTime.Now.Ticks; | 172 | // This can happen during Close() |
173 | 173 | if (m_client == null) | |
174 | // This can happen during Close() | 174 | return false; |
175 | if (m_client == null) | 175 | |
176 | return false; | 176 | while ((imagereq = GetHighestPriorityImage()) != null) |
177 | 177 | { | |
178 | while ((imagereq = GetHighestPriorityImage()) != null) | 178 | if (imagereq.IsDecoded == true) |
179 | { | 179 | { |
180 | if (imagereq.IsDecoded == true) | 180 | ++numCollected; |
181 | { | ||
182 | ++numCollected; | ||
183 | 181 | ||
184 | if (imagereq.SendPackets(m_client, maxpack)) | 182 | if (imagereq.SendPackets(m_client, maxpack)) |
185 | { | 183 | { |
186 | // Send complete. Destroy any knowledge of this transfer | 184 | // Send complete. Destroy any knowledge of this transfer |
187 | RemoveImageFromQueue(imagereq); | 185 | RemoveImageFromQueue(imagereq); |
188 | } | ||
189 | } | 186 | } |
190 | |||
191 | if (numCollected == count) | ||
192 | break; | ||
193 | } | 187 | } |
194 | //} | 188 | |
189 | if (numCollected == count) | ||
190 | break; | ||
191 | } | ||
195 | 192 | ||
196 | return m_priorityQueue.Count > 0; | 193 | return m_priorityQueue.Count > 0; |
197 | } | 194 | } |
198 | 195 | ||
199 | //Faux destructor | 196 | /// <summary> |
197 | /// Faux destructor | ||
198 | /// </summary> | ||
200 | public void Close() | 199 | public void Close() |
201 | { | 200 | { |
202 | m_shuttingdown = true; | 201 | m_shuttingdown = true; |
202 | m_priorityQueue = null; | ||
203 | m_j2kDecodeModule = null; | 203 | m_j2kDecodeModule = null; |
204 | m_assetCache = null; | 204 | m_assetCache = null; |
205 | m_client = null; | 205 | m_client = null; |
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs index 8ec143a..22c275c 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPServer.cs | |||
@@ -390,7 +390,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
390 | } | 390 | } |
391 | } | 391 | } |
392 | 392 | ||
393 | public void Flush() | 393 | public void Flush(LLUDPClient udpClient) |
394 | { | 394 | { |
395 | // FIXME: Implement? | 395 | // FIXME: Implement? |
396 | } | 396 | } |
@@ -645,15 +645,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
645 | client.OnLogout += LogoutHandler; | 645 | client.OnLogout += LogoutHandler; |
646 | client.OnConnectionClosed += ConnectionClosedHandler; | 646 | client.OnConnectionClosed += ConnectionClosedHandler; |
647 | 647 | ||
648 | m_scene.ClientManager.Add(agentID, remoteEndPoint, client); | ||
649 | |||
650 | // Start the IClientAPI | 648 | // Start the IClientAPI |
651 | m_scene.ClientManager.Add(agentID, remoteEndPoint, client); | 649 | m_scene.ClientManager.Add(client); |
652 | client.Start(); | 650 | client.Start(); |
653 | } | 651 | } |
654 | else | 652 | else |
655 | { | 653 | { |
656 | m_log.Debug("[LLUDPSERVER]: Ignoring a repeated UseCircuitCode from " + udpClient.AgentID); | 654 | m_log.WarnFormat("[LLUDPSERVER]: Ignoring a repeated UseCircuitCode from {0} at {1} for circuit {2}", |
655 | udpClient.AgentID, remoteEndPoint, circuitCode); | ||
657 | } | 656 | } |
658 | } | 657 | } |
659 | 658 | ||