* Remapped the Connection shutdown path.
* This fixes a *bunch* of Mantis bugs related to the following * -- Neighbouring simulators not appearing after relog * -- Login to simulator only to be logged off by simulator. * -- ThreadAbort * -- Unable to shutdown circuitCode: xafrisby
							parent
							
								
									ab673a1f8d
								
							
						
					
					
						commit
						a453672edb
					
				| 
						 | 
				
			
			@ -111,7 +111,7 @@ namespace OpenSim.Framework
 | 
			
		|||
                    if (m_clients.TryGetValue(circuits[i], out client))
 | 
			
		||||
                    {
 | 
			
		||||
                        Remove(client.CircuitCode);
 | 
			
		||||
                        client.Close();
 | 
			
		||||
                        client.Close(false);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                catch (System.Exception e)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -572,7 +572,7 @@ namespace OpenSim.Framework
 | 
			
		|||
 | 
			
		||||
        void SetDebug(int newDebug);
 | 
			
		||||
        void InPacket(Packet NewPack);
 | 
			
		||||
        void Close();
 | 
			
		||||
        void Close(bool ShutdownCircuit);
 | 
			
		||||
        void Kick(string message);
 | 
			
		||||
        void Stop();
 | 
			
		||||
        event ViewerEffectEventHandler OnViewerEffect;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -199,38 +199,56 @@ namespace OpenSim.Region.ClientStack
 | 
			
		|||
 | 
			
		||||
        # region Client Methods
 | 
			
		||||
 | 
			
		||||
        public void Close()
 | 
			
		||||
        private void CloseCleanup()
 | 
			
		||||
        {
 | 
			
		||||
            // Pull Client out of Region
 | 
			
		||||
            MainLog.Instance.Verbose("CLIENT", "Close has been called");
 | 
			
		||||
 | 
			
		||||
            m_scene.RemoveClient(AgentId);
 | 
			
		||||
 | 
			
		||||
            // Send the STOP packet 
 | 
			
		||||
            DisableSimulatorPacket disable = new DisableSimulatorPacket();
 | 
			
		||||
            OutPacket(disable, ThrottleOutPacketType.Task);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            // FLUSH Packets
 | 
			
		||||
            m_packetQueue.Close();
 | 
			
		||||
            m_packetQueue.Flush();
 | 
			
		||||
 | 
			
		||||
            Thread.Sleep(2000);
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            // Shut down timers
 | 
			
		||||
            m_ackTimer.Stop();
 | 
			
		||||
            m_clientPingTimer.Stop();
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            // This is just to give the client a reasonable chance of
 | 
			
		||||
            // flushing out all it's packets.  There should probably
 | 
			
		||||
            // be a better mechanism here
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            // We can't reach into other scenes and close the connection 
 | 
			
		||||
            // We need to do this over grid communications
 | 
			
		||||
            m_scene.CloseAllAgents(CircuitCode);
 | 
			
		||||
            //m_scene.CloseAllAgents(CircuitCode);
 | 
			
		||||
 | 
			
		||||
            m_clientThread.Abort();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Close(bool ShutdownCircult)
 | 
			
		||||
        {
 | 
			
		||||
            
 | 
			
		||||
            // Pull Client out of Region
 | 
			
		||||
            MainLog.Instance.Verbose("CLIENT", "Close has been called");
 | 
			
		||||
 | 
			
		||||
            //raiseevent on the packet server to Shutdown the circuit
 | 
			
		||||
            if (ShutdownCircult)
 | 
			
		||||
                OnConnectionClosed(this);
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
            CloseCleanup();
 | 
			
		||||
 | 
			
		||||
            
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Kick(string message)
 | 
			
		||||
        {
 | 
			
		||||
            KickUserPacket kupack = new KickUserPacket();
 | 
			
		||||
| 
						 | 
				
			
			@ -2214,7 +2232,7 @@ namespace OpenSim.Region.ClientStack
 | 
			
		|||
                                      "ClientView.m_packetQueue.cs:ProcessOutPacket() - WARNING: Socket exception occurred on connection " +
 | 
			
		||||
                                      m_userEndPoint.ToString() + " - killing thread");
 | 
			
		||||
                MainLog.Instance.Error(e.ToString());
 | 
			
		||||
                Close();
 | 
			
		||||
                Close(true);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -132,7 +132,7 @@ namespace OpenSim.Region.ClientStack
 | 
			
		|||
        public virtual void CloseClient(IClientAPI client)
 | 
			
		||||
        {
 | 
			
		||||
            CloseCircuit(client.CircuitCode);
 | 
			
		||||
            client.Close();
 | 
			
		||||
            client.Close(false);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -478,7 +478,7 @@ namespace OpenSim.Region.Environment.Scenes
 | 
			
		|||
            // Stop all client threads.
 | 
			
		||||
            ForEachScenePresence(delegate(ScenePresence avatar)
 | 
			
		||||
                    {
 | 
			
		||||
                        avatar.ControllingClient.Close();
 | 
			
		||||
                        avatar.ControllingClient.Close(true);
 | 
			
		||||
                    });
 | 
			
		||||
            // Stop updating the scene objects and agents.
 | 
			
		||||
            m_heartbeatTimer.Close();
 | 
			
		||||
| 
						 | 
				
			
			@ -1758,7 +1758,7 @@ namespace OpenSim.Region.Environment.Scenes
 | 
			
		|||
                                                        bool childagent = !p.Equals(null) && p.IsChildAgent;
 | 
			
		||||
                                                        if (controller.AgentId != godID && !childagent) // Do we really want to kick the initiator of this madness?
 | 
			
		||||
                                                        {
 | 
			
		||||
                                                            controller.Close();
 | 
			
		||||
                                                            controller.Close(true);
 | 
			
		||||
                                                        }
 | 
			
		||||
                                                    }
 | 
			
		||||
                            );
 | 
			
		||||
| 
						 | 
				
			
			@ -1775,7 +1775,7 @@ namespace OpenSim.Region.Environment.Scenes
 | 
			
		|||
                        }
 | 
			
		||||
 | 
			
		||||
                        m_scenePresences[agentID].ControllingClient.Kick(Helpers.FieldToUTF8String(reason));
 | 
			
		||||
                        m_scenePresences[agentID].ControllingClient.Close();
 | 
			
		||||
                        m_scenePresences[agentID].ControllingClient.Close(true);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -464,7 +464,7 @@ namespace SimpleApp
 | 
			
		|||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void Close()
 | 
			
		||||
        public void Close(bool ShutdownCircuit)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue