* 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