From 7aac4d650f1e9d8b5ac071872f28b39e83143ccf Mon Sep 17 00:00:00 2001 From: meta7 Date: Wed, 11 Aug 2010 14:30:09 -0700 Subject: Fix the llRemoveInventory recursive lock error (again) --- .../Shared/Api/Implementation/LSL_Api.cs | 24 ++++++++++++---------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'OpenSim/Region/ScriptEngine/Shared') diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 1486e2a..9bece31 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -4200,25 +4200,27 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api { m_host.AddScriptLPS(1); + List inv; try { m_host.TaskInventory.LockItemsForRead(true); - foreach (TaskInventoryItem item in m_host.TaskInventory.Values) - { - if (item.Name == name) - { - if (item.ItemID == m_itemID) - throw new ScriptDeleteException(); - else - m_host.Inventory.RemoveInventoryItem(item.ItemID); - return; - } - } + inv = new List(m_host.TaskInventory.Values); } finally { m_host.TaskInventory.LockItemsForRead(false); } + foreach (TaskInventoryItem item in inv) + { + if (item.Name == name) + { + if (item.ItemID == m_itemID) + throw new ScriptDeleteException(); + else + m_host.Inventory.RemoveInventoryItem(item.ItemID); + return; + } + } } public void llSetText(string text, LSL_Vector color, double alpha) -- cgit v1.1