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

@@ -60,6 +60,14 @@ namespace OpenSim.Region.Framework.Interfaces
/// </remarks>
AvatarAppearance Appearance { get; set; }
/// <summary>
/// The AttachmentsModule synchronizes on this to avoid race conditions between commands to add and remove attachments.
/// </summary>
/// <remarks>
/// All add and remove attachment operations must synchronize on this for the lifetime of their operations.
/// </remarks>
Object AttachmentsSyncLock { get; }
/// <summary>
/// The scene objects attached to this avatar.
/// </summary>