* Stop warnings about non existent scene presences/entities being removed on client log off

* This is being done by preventing close from being called twice on child agent closure (nres which would have been thrown are being swallowed).  
* However, it should be possible to do much better cleanup on this code in the future
0.6.0-stable
Justin Clarke Casey 2008-08-12 19:00:13 +00:00
parent 8ea92c0669
commit 4e555b87f3
4 changed files with 30 additions and 17 deletions

View File

@ -86,7 +86,9 @@ namespace OpenSim.Framework.Communications.Cache
} }
} }
m_log.ErrorFormat("[USER CACHE]: Tried to remove the profile of user {0}, but this was not in the scene", userId); m_log.WarnFormat(
"[USER CACHE]: Tried to remove the profile of user {0}, but this was not in the scene", userId);
return false; return false;
} }

View File

@ -454,18 +454,26 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// <param name="shutdownCircuit"></param> /// <param name="shutdownCircuit"></param>
public void Close(bool shutdownCircuit) public void Close(bool shutdownCircuit)
{ {
// Pull Client out of Region m_log.DebugFormat(
m_log.Info("[CLIENT]: Close has been called"); "[CLIENT]: Close has been called with shutdownCircuit = {0} on scene {1}",
shutdownCircuit, m_scene.RegionInfo.RegionName);
m_PacketHandler.Flush(); m_PacketHandler.Flush();
//raiseevent on the packet server to Shutdown the circuit // raise an event on the packet server to Shutdown the circuit
// Now, if we raise the event then the packet server will call this method itself, so don't try cleanup
// here otherwise we'll end up calling it twice.
// FIXME: In truth, I might be wrong but this whole business of calling this method twice (with different args) looks
// horribly tangly. Hopefully it should be possible to greatly simplify it.
if (shutdownCircuit) if (shutdownCircuit)
{ {
OnConnectionClosed(this); OnConnectionClosed(this);
} }
else
{
CloseCleanup(shutdownCircuit); CloseCleanup(shutdownCircuit);
} }
}
public void Kick(string message) public void Kick(string message)
{ {

View File

@ -584,26 +584,26 @@ namespace OpenSim.Region.Environment.Scenes
{ {
lock (Entities) lock (Entities)
{ {
if (Entities.Remove(agentID)) if (!Entities.Remove(agentID))
{
//m_log.InfoFormat("[SCENE] Removed scene presence {0} from entities list", agentID);
}
else
{ {
m_log.WarnFormat("[SCENE] Tried to remove non-existent scene presence with agent ID {0} from scene Entities list", agentID); m_log.WarnFormat("[SCENE] Tried to remove non-existent scene presence with agent ID {0} from scene Entities list", agentID);
} }
// else
// {
// m_log.InfoFormat("[SCENE] Removed scene presence {0} from entities list", agentID);
// }
} }
lock (ScenePresences) lock (ScenePresences)
{ {
if (ScenePresences.Remove(agentID)) if (!ScenePresences.Remove(agentID))
{
//m_log.InfoFormat("[SCENE] Removed scene presence {0}", agentID);
}
else
{ {
m_log.WarnFormat("[SCENE] Tried to remove non-existent scene presence with agent ID {0} from scene ScenePresences list", agentID); m_log.WarnFormat("[SCENE] Tried to remove non-existent scene presence with agent ID {0} from scene ScenePresences list", agentID);
} }
// else
// {
// m_log.InfoFormat("[SCENE] Removed scene presence {0} from scene presences list", agentID);
// }
} }
} }

View File

@ -2259,6 +2259,7 @@ namespace OpenSim.Region.Environment.Scenes
{ {
childagentYN = avatar.IsChildAgent; childagentYN = avatar.IsChildAgent;
} }
try try
{ {
m_log.DebugFormat( m_log.DebugFormat(
@ -2295,6 +2296,7 @@ namespace OpenSim.Region.Environment.Scenes
// We don't know which count to remove it from // We don't know which count to remove it from
// Avatar is already disposed :/ // Avatar is already disposed :/
} }
m_eventManager.TriggerOnRemovePresence(agentID); m_eventManager.TriggerOnRemovePresence(agentID);
Broadcast(delegate(IClientAPI client) Broadcast(delegate(IClientAPI client)
{ {
@ -2631,6 +2633,7 @@ namespace OpenSim.Region.Environment.Scenes
{ {
m_innerScene.removeUserCount(true); m_innerScene.removeUserCount(true);
} }
// Tell a single agent to disconnect from the region. // Tell a single agent to disconnect from the region.
presence.ControllingClient.SendShutdownConnectionNotice(); presence.ControllingClient.SendShutdownConnectionNotice();