diff options
author | Justin Clark-Casey (justincc) | 2012-07-18 00:14:02 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2012-07-18 00:14:02 +0100 |
commit | eb590becf03d94d9afeef471c000c46b044d0c5b (patch) | |
tree | 3a888d62d31c009851977627b7cdc12779b92949 /OpenSim | |
parent | Merge branch 'master' of ssh://opensimulator.org/var/git/opensim (diff) | |
download | opensim-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.
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.cs | 26 |
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)); |