aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs10
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs3
-rw-r--r--OpenSim/Region/ScriptEngine/XEngine/XEngine.cs10
3 files changed, 18 insertions, 5 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 93888f1..eacd219 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -126,7 +126,10 @@ namespace OpenSim.Region.Framework.Scenes
126 } 126 }
127 else 127 else
128 { 128 {
129 m_partsLock.ExitReadLock(); 129 if (m_partsLock.RecursiveReadCount > 0)
130 {
131 m_partsLock.ExitReadLock();
132 }
130 } 133 }
131 } 134 }
132 public void lockPartsForWrite(bool locked) 135 public void lockPartsForWrite(bool locked)
@@ -155,7 +158,10 @@ namespace OpenSim.Region.Framework.Scenes
155 } 158 }
156 else 159 else
157 { 160 {
158 m_partsLock.ExitWriteLock(); 161 if (m_partsLock.RecursiveWriteCount > 0)
162 {
163 m_partsLock.ExitWriteLock();
164 }
159 } 165 }
160 } 166 }
161 167
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index 4780ff2..b57d912 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -320,17 +320,18 @@ namespace OpenSim.Region.Framework.Scenes
320 { 320 {
321 if (m_items.ContainsKey(itemId)) 321 if (m_items.ContainsKey(itemId))
322 { 322 {
323 m_items.LockItemsForRead(false);
323 CreateScriptInstance(m_items[itemId], startParam, postOnRez, engine, stateSource); 324 CreateScriptInstance(m_items[itemId], startParam, postOnRez, engine, stateSource);
324 } 325 }
325 else 326 else
326 { 327 {
328 m_items.LockItemsForRead(false);
327 m_log.ErrorFormat( 329 m_log.ErrorFormat(
328 "[PRIM INVENTORY]: " + 330 "[PRIM INVENTORY]: " +
329 "Couldn't start script with ID {0} since it couldn't be found for prim {1}, {2} at {3} in {4}", 331 "Couldn't start script with ID {0} since it couldn't be found for prim {1}, {2} at {3} in {4}",
330 itemId, m_part.Name, m_part.UUID, 332 itemId, m_part.Name, m_part.UUID,
331 m_part.AbsolutePosition, m_part.ParentGroup.Scene.RegionInfo.RegionName); 333 m_part.AbsolutePosition, m_part.ParentGroup.Scene.RegionInfo.RegionName);
332 } 334 }
333 m_items.LockItemsForRead(false);
334 } 335 }
335 else 336 else
336 { 337 {
diff --git a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
index 49c69ab..184af19 100644
--- a/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
+++ b/OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
@@ -150,7 +150,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine
150 } 150 }
151 else 151 else
152 { 152 {
153 m_scriptsLock.ExitReadLock(); 153 if (m_scriptsLock.RecursiveReadCount > 0)
154 {
155 m_scriptsLock.ExitReadLock();
156 }
154 } 157 }
155 } 158 }
156 private void lockScriptsForWrite(bool locked) 159 private void lockScriptsForWrite(bool locked)
@@ -179,7 +182,10 @@ namespace OpenSim.Region.ScriptEngine.XEngine
179 } 182 }
180 else 183 else
181 { 184 {
182 m_scriptsLock.ExitWriteLock(); 185 if (m_scriptsLock.RecursiveWriteCount > 0)
186 {
187 m_scriptsLock.ExitWriteLock();
188 }
183 } 189 }
184 } 190 }
185 191