* 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))
|
if (m_clients.TryGetValue(circuits[i], out client))
|
||||||
{
|
{
|
||||||
Remove(client.CircuitCode);
|
Remove(client.CircuitCode);
|
||||||
client.Close();
|
client.Close(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (System.Exception e)
|
catch (System.Exception e)
|
||||||
|
|
|
@ -572,7 +572,7 @@ namespace OpenSim.Framework
|
||||||
|
|
||||||
void SetDebug(int newDebug);
|
void SetDebug(int newDebug);
|
||||||
void InPacket(Packet NewPack);
|
void InPacket(Packet NewPack);
|
||||||
void Close();
|
void Close(bool ShutdownCircuit);
|
||||||
void Kick(string message);
|
void Kick(string message);
|
||||||
void Stop();
|
void Stop();
|
||||||
event ViewerEffectEventHandler OnViewerEffect;
|
event ViewerEffectEventHandler OnViewerEffect;
|
||||||
|
|
|
@ -199,38 +199,56 @@ namespace OpenSim.Region.ClientStack
|
||||||
|
|
||||||
# region Client Methods
|
# 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);
|
m_scene.RemoveClient(AgentId);
|
||||||
|
|
||||||
// Send the STOP packet
|
// Send the STOP packet
|
||||||
DisableSimulatorPacket disable = new DisableSimulatorPacket();
|
DisableSimulatorPacket disable = new DisableSimulatorPacket();
|
||||||
OutPacket(disable, ThrottleOutPacketType.Task);
|
OutPacket(disable, ThrottleOutPacketType.Task);
|
||||||
|
|
||||||
|
|
||||||
// FLUSH Packets
|
// FLUSH Packets
|
||||||
m_packetQueue.Close();
|
m_packetQueue.Close();
|
||||||
m_packetQueue.Flush();
|
m_packetQueue.Flush();
|
||||||
|
|
||||||
Thread.Sleep(2000);
|
Thread.Sleep(2000);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Shut down timers
|
// Shut down timers
|
||||||
m_ackTimer.Stop();
|
m_ackTimer.Stop();
|
||||||
m_clientPingTimer.Stop();
|
m_clientPingTimer.Stop();
|
||||||
|
|
||||||
// This is just to give the client a reasonable chance of
|
// This is just to give the client a reasonable chance of
|
||||||
// flushing out all it's packets. There should probably
|
// flushing out all it's packets. There should probably
|
||||||
// be a better mechanism here
|
// be a better mechanism here
|
||||||
|
|
||||||
// We can't reach into other scenes and close the connection
|
// We can't reach into other scenes and close the connection
|
||||||
// We need to do this over grid communications
|
// We need to do this over grid communications
|
||||||
m_scene.CloseAllAgents(CircuitCode);
|
//m_scene.CloseAllAgents(CircuitCode);
|
||||||
|
|
||||||
m_clientThread.Abort();
|
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)
|
public void Kick(string message)
|
||||||
{
|
{
|
||||||
KickUserPacket kupack = new KickUserPacket();
|
KickUserPacket kupack = new KickUserPacket();
|
||||||
|
@ -2214,7 +2232,7 @@ namespace OpenSim.Region.ClientStack
|
||||||
"ClientView.m_packetQueue.cs:ProcessOutPacket() - WARNING: Socket exception occurred on connection " +
|
"ClientView.m_packetQueue.cs:ProcessOutPacket() - WARNING: Socket exception occurred on connection " +
|
||||||
m_userEndPoint.ToString() + " - killing thread");
|
m_userEndPoint.ToString() + " - killing thread");
|
||||||
MainLog.Instance.Error(e.ToString());
|
MainLog.Instance.Error(e.ToString());
|
||||||
Close();
|
Close(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -132,7 +132,7 @@ namespace OpenSim.Region.ClientStack
|
||||||
public virtual void CloseClient(IClientAPI client)
|
public virtual void CloseClient(IClientAPI client)
|
||||||
{
|
{
|
||||||
CloseCircuit(client.CircuitCode);
|
CloseCircuit(client.CircuitCode);
|
||||||
client.Close();
|
client.Close(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -478,7 +478,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
// Stop all client threads.
|
// Stop all client threads.
|
||||||
ForEachScenePresence(delegate(ScenePresence avatar)
|
ForEachScenePresence(delegate(ScenePresence avatar)
|
||||||
{
|
{
|
||||||
avatar.ControllingClient.Close();
|
avatar.ControllingClient.Close(true);
|
||||||
});
|
});
|
||||||
// Stop updating the scene objects and agents.
|
// Stop updating the scene objects and agents.
|
||||||
m_heartbeatTimer.Close();
|
m_heartbeatTimer.Close();
|
||||||
|
@ -1758,7 +1758,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
bool childagent = !p.Equals(null) && p.IsChildAgent;
|
bool childagent = !p.Equals(null) && p.IsChildAgent;
|
||||||
if (controller.AgentId != godID && !childagent) // Do we really want to kick the initiator of this madness?
|
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.Kick(Helpers.FieldToUTF8String(reason));
|
||||||
m_scenePresences[agentID].ControllingClient.Close();
|
m_scenePresences[agentID].ControllingClient.Close(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -464,7 +464,7 @@ namespace SimpleApp
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Close()
|
public void Close(bool ShutdownCircuit)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue