Improve consistency of locking for SOG.m_parts in order to avoid race conditions in linking and unlinking

This commit is contained in:
Justin Clark-Casey (justincc)
2010-08-26 00:08:53 +01:00
parent 22fd00b002
commit 8031f8ec09
23 changed files with 912 additions and 747 deletions

View File

@@ -121,16 +121,19 @@ namespace OpenSim.Region.OptionalModules.ContentManagement
continue;
temp = (SceneObjectGroup) currObj;
if (m_CMEntityHash.ContainsKey(temp.UUID))
lock (temp.Children)
{
foreach (SceneObjectPart part in temp.Children.Values)
if (!((ContentManagementEntity)m_CMEntityHash[temp.UUID]).HasChildPrim(part.UUID))
if (m_CMEntityHash.ContainsKey(temp.UUID))
{
foreach (SceneObjectPart part in temp.Children.Values)
if (!((ContentManagementEntity)m_CMEntityHash[temp.UUID]).HasChildPrim(part.UUID))
missingList.Add(part);
}
else //Entire group is missing from revision. (and is a new part in region)
{
foreach (SceneObjectPart part in temp.Children.Values)
missingList.Add(part);
}
else //Entire group is missing from revision. (and is a new part in region)
{
foreach (SceneObjectPart part in temp.Children.Values)
missingList.Add(part);
}
}
}
return missingList;