aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/ScenePresence.cs
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2011-09-12 21:57:22 +0100
committerJustin Clark-Casey (justincc)2011-09-12 21:57:22 +0100
commitea0f78c97152d3aa54822487e5343ca2db0b47b9 (patch)
tree1496c7d6ebbed346209f1513f2affa3f1ba6f62a /OpenSim/Region/Framework/Scenes/ScenePresence.cs
parentlock AvatarAppearance.m_attachments when we use it (diff)
downloadopensim-SC_OLD-ea0f78c97152d3aa54822487e5343ca2db0b47b9.zip
opensim-SC_OLD-ea0f78c97152d3aa54822487e5343ca2db0b47b9.tar.gz
opensim-SC_OLD-ea0f78c97152d3aa54822487e5343ca2db0b47b9.tar.bz2
opensim-SC_OLD-ea0f78c97152d3aa54822487e5343ca2db0b47b9.tar.xz
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.
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/ScenePresence.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/ScenePresence.cs4
1 files changed, 4 insertions, 0 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index d65d78d..86e1e11 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -120,6 +120,8 @@ namespace OpenSim.Region.Framework.Scenes
120 /// </remarks> 120 /// </remarks>
121 protected List<SceneObjectGroup> m_attachments = new List<SceneObjectGroup>(); 121 protected List<SceneObjectGroup> m_attachments = new List<SceneObjectGroup>();
122 122
123 public Object AttachmentsSyncLock { get; private set; }
124
123 private Dictionary<UUID, ScriptControllers> scriptedcontrols = new Dictionary<UUID, ScriptControllers>(); 125 private Dictionary<UUID, ScriptControllers> scriptedcontrols = new Dictionary<UUID, ScriptControllers>();
124 private ScriptControlled IgnoredControls = ScriptControlled.CONTROL_ZERO; 126 private ScriptControlled IgnoredControls = ScriptControlled.CONTROL_ZERO;
125 private ScriptControlled LastCommands = ScriptControlled.CONTROL_ZERO; 127 private ScriptControlled LastCommands = ScriptControlled.CONTROL_ZERO;
@@ -709,6 +711,8 @@ namespace OpenSim.Region.Framework.Scenes
709 public ScenePresence( 711 public ScenePresence(
710 IClientAPI client, Scene world, RegionInfo reginfo, AvatarAppearance appearance, PresenceType type) 712 IClientAPI client, Scene world, RegionInfo reginfo, AvatarAppearance appearance, PresenceType type)
711 { 713 {
714 AttachmentsSyncLock = new Object();
715
712 m_sendCourseLocationsMethod = SendCoarseLocationsDefault; 716 m_sendCourseLocationsMethod = SendCoarseLocationsDefault;
713 m_sceneViewer = new SceneViewer(this); 717 m_sceneViewer = new SceneViewer(this);
714 m_animator = new ScenePresenceAnimator(this); 718 m_animator = new ScenePresenceAnimator(this);