change scenegraph locking
parent
c5604d3857
commit
3e49e13249
|
@ -150,9 +150,14 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
protected internal void Close()
|
||||
{
|
||||
m_scenePresencesLock.EnterWriteLock();
|
||||
bool entered = false;
|
||||
try
|
||||
{
|
||||
try { }
|
||||
finally
|
||||
{
|
||||
m_scenePresencesLock.EnterWriteLock();
|
||||
entered = true;
|
||||
m_scenePresenceMap = new ConcurrentDictionary<UUID, ScenePresence>();
|
||||
m_scenePresenceLocalIDMap = new ConcurrentDictionary<uint, ScenePresence>();
|
||||
m_scenePresenceArray = new List<ScenePresence>();
|
||||
|
@ -162,8 +167,10 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
_PhyScene.OnPhysicsCrash -= physicsBasedCrash;
|
||||
_PhyScene = null;
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if(entered)
|
||||
m_scenePresencesLock.ExitWriteLock();
|
||||
}
|
||||
|
||||
|
@ -707,6 +714,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
bool entered = false;
|
||||
|
||||
try
|
||||
{
|
||||
try{ }
|
||||
finally
|
||||
{
|
||||
m_scenePresencesLock.EnterWriteLock();
|
||||
entered = true;
|
||||
|
@ -735,6 +745,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
++m_spArrayVersion;
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if(entered)
|
||||
|
@ -758,6 +769,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
bool entered = false;
|
||||
try
|
||||
{
|
||||
try { }
|
||||
finally
|
||||
{
|
||||
m_scenePresencesLock.EnterWriteLock();
|
||||
entered = true;
|
||||
|
@ -774,6 +788,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_log.WarnFormat("[SCENE GRAPH]: Tried to remove non-existent scene presence with agent ID {0} from scene ScenePresences list", agentID);
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if(entered)
|
||||
|
@ -905,7 +920,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
protected internal List<ScenePresence> GetScenePresences()
|
||||
{
|
||||
bool entered = false;
|
||||
List<ScenePresence> ret = new List<ScenePresence>();
|
||||
try
|
||||
{
|
||||
try{ }
|
||||
finally
|
||||
{
|
||||
m_scenePresencesLock.EnterWriteLock();
|
||||
entered = true;
|
||||
|
@ -914,17 +933,15 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_scenePresenceArray = new List<ScenePresence>(m_scenePresenceMap.Values);
|
||||
m_spArrayLastVersion = m_spArrayVersion;
|
||||
}
|
||||
return m_scenePresenceArray;
|
||||
ret = m_scenePresenceArray;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return new List<ScenePresence>();
|
||||
}
|
||||
finally
|
||||
{
|
||||
if(entered)
|
||||
m_scenePresencesLock.ExitWriteLock();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
Loading…
Reference in New Issue