put in a try block to catch the ForEach loop dying.

afrisby
Sean Dague 2007-12-11 22:20:22 +00:00
parent 6b5db310cd
commit c7f5a94763
2 changed files with 11 additions and 4 deletions

View File

@ -206,6 +206,8 @@ namespace OpenSim.Region.ClientStack
public void Close()
{
// Pull Client out of Region
MainLog.Instance.Verbose("CLIENT", "Close has been called");
m_scene.RemoveClient(AgentId);
// Send the STOP packet
@ -215,6 +217,8 @@ namespace OpenSim.Region.ClientStack
// FLUSH Packets
PacketQueue.Close();
PacketQueue.Flush();
Thread.Sleep(2000);
// Shut down timers
AckTimer.Stop();
@ -223,7 +227,6 @@ namespace OpenSim.Region.ClientStack
// 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
Thread.Sleep(2000);
ClientThread.Abort();
}

View File

@ -1898,9 +1898,13 @@ namespace OpenSim.Region.Environment.Scenes
// We don't want to try to send messages if there are no avatar.
if (!(m_scenePresences.Equals(null)))
{
foreach (ScenePresence presence in m_scenePresences.Values)
{
action(presence);
try {
foreach (ScenePresence presence in m_scenePresences.Values)
{
action(presence);
}
} catch (Exception e) {
MainLog.Instance.Verbose("BUG", e.ToString());
}
}
}