Start locking entire add/remove operations on an IScenePresence.AttachmentsSyncLock object

Attach and detach packets are processed asynchronously when received from a viewer.
Bugs like http://opensimulator.org/mantis/view.php?id=5644 indicate that in some situations (such as attaching/detaching entire folders of objects at once), there are race conditions between these threads.
Since multiple data structures need to be updated on attach/detach, it's not enough to lock the individual collections.
Therefore, this commit introduces a new IScenePresence.AttachmentsSyncLock which add/remove operations lock on.
This commit is contained in:
Justin Clark-Casey (justincc)
2011-09-12 21:57:22 +01:00
parent dab6387bba
commit ea0f78c971
4 changed files with 225 additions and 172 deletions

View File

@@ -87,6 +87,15 @@ namespace OpenSim.Region.Framework.Interfaces
/// <returns>The scene object that was attached. Null if the scene object could not be found</returns>
ISceneEntity RezSingleAttachmentFromInventory(IClientAPI remoteClient, UUID itemID, uint AttachmentPt);
/// <summary>
/// Rez an attachment from user inventory and change inventory status to match.
/// </summary>
/// <param name="sp"></param>
/// <param name="itemID"></param>
/// <param name="AttachmentPt"></param>
/// <returns>The scene object that was attached. Null if the scene object could not be found</returns>
ISceneEntity RezSingleAttachmentFromInventory(ScenePresence sp, UUID itemID, uint AttachmentPt);
/// <summary>
/// Rez multiple attachments from a user's inventory
/// </summary>