lock SceneObjectGroupsByFullID in SceneGraph.ForEachSOG() to stop failure if SceneObjectGroupsByFullID is updated elsewhere at the same time.
parent
0a277a64a7
commit
9e5f5f3d80
|
@ -1153,8 +1153,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="action"></param>
|
/// <param name="action"></param>
|
||||||
protected internal void ForEachSOG(Action<SceneObjectGroup> action)
|
protected internal void ForEachSOG(Action<SceneObjectGroup> action)
|
||||||
{
|
{
|
||||||
// FIXME: Need to lock here, really.
|
List<SceneObjectGroup> objlist;
|
||||||
List<SceneObjectGroup> objlist = new List<SceneObjectGroup>(SceneObjectGroupsByFullID.Values);
|
lock (SceneObjectGroupsByFullID)
|
||||||
|
objlist = new List<SceneObjectGroup>(SceneObjectGroupsByFullID.Values);
|
||||||
|
|
||||||
foreach (SceneObjectGroup obj in objlist)
|
foreach (SceneObjectGroup obj in objlist)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -1163,7 +1165,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
// Catch it and move on. This includes situations where splist has inconsistent info
|
// Catch it and move on. This includes situations where objlist has inconsistent info
|
||||||
m_log.WarnFormat(
|
m_log.WarnFormat(
|
||||||
"[SCENEGRAPH]: Problem processing action in ForEachSOG: {0} {1}", e.Message, e.StackTrace);
|
"[SCENEGRAPH]: Problem processing action in ForEachSOG: {0} {1}", e.Message, e.StackTrace);
|
||||||
}
|
}
|
||||||
|
@ -1398,10 +1400,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Update the texture entry of the given prim.
|
/// Update the texture entry of the given prim.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
///
|
/// <remarks>
|
||||||
/// A texture entry is an object that contains details of all the textures of the prim's face. In this case,
|
/// A texture entry is an object that contains details of all the textures of the prim's face. In this case,
|
||||||
/// the texture is given in its byte serialized form.
|
/// the texture is given in its byte serialized form.
|
||||||
///
|
/// </remarks>
|
||||||
/// <param name="localID"></param>
|
/// <param name="localID"></param>
|
||||||
/// <param name="texture"></param>
|
/// <param name="texture"></param>
|
||||||
/// <param name="remoteClient"></param>
|
/// <param name="remoteClient"></param>
|
||||||
|
|
Loading…
Reference in New Issue