diff --git a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
index 4dd50d683c..d893890d83 100644
--- a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
@@ -215,5 +215,6 @@ namespace OpenSim.Region.Framework.Interfaces
/// A
///
Dictionary GetScriptStates();
+ Dictionary GetScriptStates(bool oldIDs);
}
}
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index 84c371990c..1c6f2d183d 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -1040,6 +1040,11 @@ namespace OpenSim.Region.Framework.Scenes
#endregion
public void SaveScriptedState(XmlTextWriter writer)
+ {
+ SaveScriptedState(writer, false);
+ }
+
+ public void SaveScriptedState(XmlTextWriter writer, bool oldIDs)
{
XmlDocument doc = new XmlDocument();
Dictionary states = new Dictionary();
@@ -1050,7 +1055,7 @@ namespace OpenSim.Region.Framework.Scenes
foreach (SceneObjectPart part in m_parts.Values)
{
- Dictionary pstates = part.Inventory.GetScriptStates();
+ Dictionary pstates = part.Inventory.GetScriptStates(oldIDs);
foreach (UUID itemid in pstates.Keys)
{
states.Add(itemid, pstates[itemid]);
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index 04df35a0c9..f875224d6a 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -311,11 +311,12 @@ namespace OpenSim.Region.Framework.Scenes
if (m_part.ParentGroup.m_savedScriptState != null)
RestoreSavedScriptState(item.OldItemID, item.ItemID);
- lock (m_items)
- {
- m_items[item.ItemID].PermsMask = 0;
- m_items[item.ItemID].PermsGranter = UUID.Zero;
- }
+ m_items.LockItemsForWrite(true);
+
+ m_items[item.ItemID].PermsMask = 0;
+ m_items[item.ItemID].PermsGranter = UUID.Zero;
+
+ m_items.LockItemsForWrite(false);
string script = Utils.BytesToString(asset.Data);
m_part.ParentGroup.Scene.EventManager.TriggerRezScript(
@@ -713,15 +714,16 @@ namespace OpenSim.Region.Framework.Scenes
{
IList items = new List();
- lock (m_items)
+ m_items.LockItemsForRead(true);
+
+ foreach (TaskInventoryItem item in m_items.Values)
{
- foreach (TaskInventoryItem item in m_items.Values)
- {
- if (item.Name == name)
- items.Add(item);
- }
+ if (item.Name == name)
+ items.Add(item);
}
+ m_items.LockItemsForRead(false);
+
return items;
}
@@ -1114,6 +1116,11 @@ namespace OpenSim.Region.Framework.Scenes
}
public Dictionary GetScriptStates()
+ {
+ return GetScriptStates(false);
+ }
+
+ public Dictionary GetScriptStates(bool oldIDs)
{
IScriptModule[] engines = m_part.ParentGroup.Scene.RequestModuleInterfaces();
@@ -1132,8 +1139,16 @@ namespace OpenSim.Region.Framework.Scenes
string n = e.GetXMLState(item.ItemID);
if (n != String.Empty)
{
- if (!ret.ContainsKey(item.ItemID))
- ret[item.ItemID] = n;
+ if (oldIDs)
+ {
+ if (!ret.ContainsKey(item.OldItemID))
+ ret[item.OldItemID] = n;
+ }
+ else
+ {
+ if (!ret.ContainsKey(item.ItemID))
+ ret[item.ItemID] = n;
+ }
break;
}
}