aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2012-07-18 00:14:02 +0100
committerJustin Clark-Casey (justincc)2012-07-18 00:14:02 +0100
commiteb590becf03d94d9afeef471c000c46b044d0c5b (patch)
tree3a888d62d31c009851977627b7cdc12779b92949
parentMerge branch 'master' of ssh://opensimulator.org/var/git/opensim (diff)
downloadopensim-SC-eb590becf03d94d9afeef471c000c46b044d0c5b.zip
opensim-SC-eb590becf03d94d9afeef471c000c46b044d0c5b.tar.gz
opensim-SC-eb590becf03d94d9afeef471c000c46b044d0c5b.tar.bz2
opensim-SC-eb590becf03d94d9afeef471c000c46b044d0c5b.tar.xz
Close() the ScenePresence after we've removed it from the scene graph, to cut down race conditions when another thread manages the grab the presence after some SP structures have been reset.
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs26
1 files changed, 16 insertions, 10 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 3e9583c..de2b192 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -3317,24 +3317,30 @@ namespace OpenSim.Region.Framework.Scenes
3317 if (AgentTransactionsModule != null) 3317 if (AgentTransactionsModule != null)
3318 AgentTransactionsModule.RemoveAgentAssetTransactions(agentID); 3318 AgentTransactionsModule.RemoveAgentAssetTransactions(agentID);
3319 3319
3320 avatar.Close();
3321
3322 m_authenticateHandler.RemoveCircuit(avatar.ControllingClient.CircuitCode); 3320 m_authenticateHandler.RemoveCircuit(avatar.ControllingClient.CircuitCode);
3323 } 3321 }
3324 catch (Exception e) 3322 catch (Exception e)
3325 { 3323 {
3326 m_log.Error( 3324 m_log.Error(
3327 string.Format("[SCENE]: Exception removing {0} from {1}, ", avatar.Name, RegionInfo.RegionName), e); 3325 string.Format("[SCENE]: Exception removing {0} from {1}. Cleaning up. Exception ", avatar.Name, Name), e);
3328 } 3326 }
3329 finally 3327 finally
3330 { 3328 {
3331 // Always clean these structures up so that any failure above doesn't cause them to remain in the 3329 try
3332 // scene with possibly bad effects (e.g. continually timing out on unacked packets and triggering 3330 {
3333 // the same cleanup exception continually. 3331 // Always clean these structures up so that any failure above doesn't cause them to remain in the
3334 // TODO: This should probably extend to the whole method, but we don't want to also catch the NRE 3332 // scene with possibly bad effects (e.g. continually timing out on unacked packets and triggering
3335 // since this would hide the underlying failure and other associated problems. 3333 // the same cleanup exception continually.
3336 m_sceneGraph.RemoveScenePresence(agentID); 3334 m_sceneGraph.RemoveScenePresence(agentID);
3337 m_clientManager.Remove(agentID); 3335 m_clientManager.Remove(agentID);
3336
3337 avatar.Close();
3338 }
3339 catch (Exception e)
3340 {
3341 m_log.Error(
3342 string.Format("[SCENE]: Exception in final clean up of {0} in {1}. Exception ", avatar.Name, Name), e);
3343 }
3338 } 3344 }
3339 3345
3340 //m_log.InfoFormat("[SCENE] Memory pre GC {0}", System.GC.GetTotalMemory(false)); 3346 //m_log.InfoFormat("[SCENE] Memory pre GC {0}", System.GC.GetTotalMemory(false));