Convert some remaining legacy lock()s for m_parts in SceneObjectGroup to ReaderWriteLockSlim, hopefully fixes a native crash

avinationmerge
CasperW 2009-12-27 07:08:16 +01:00
parent a6c93ce875
commit 19a5e606b3
1 changed files with 13 additions and 11 deletions

View File

@ -46,14 +46,14 @@ namespace OpenSim.Region.Framework.Scenes
/// </summary> /// </summary>
public void ForceInventoryPersistence() public void ForceInventoryPersistence()
{ {
lock (m_parts) lockPartsForRead(true);
{ List<SceneObjectPart> values = new List<SceneObjectPart>(m_parts.Values);
foreach (SceneObjectPart part in m_parts.Values) lockPartsForRead(false);
foreach (SceneObjectPart part in values)
{ {
part.Inventory.ForceInventoryPersistence(); part.Inventory.ForceInventoryPersistence();
} }
} }
}
/// <summary> /// <summary>
/// Start the scripts contained in all the prims in this group. /// Start the scripts contained in all the prims in this group.
@ -76,13 +76,15 @@ namespace OpenSim.Region.Framework.Scenes
/// </summary> /// </summary>
public void RemoveScriptInstances() public void RemoveScriptInstances()
{ {
lock (m_parts) lockPartsForRead(true);
{ List<SceneObjectPart> values = new List<SceneObjectPart>(m_parts.Values);
foreach (SceneObjectPart part in m_parts.Values) lockPartsForRead(false);
foreach (SceneObjectPart part in values)
{ {
part.Inventory.RemoveScriptInstances(); part.Inventory.RemoveScriptInstances();
} }
}
} }
/// <summary> /// <summary>