aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment/Scenes
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Environment/Scenes')
-rw-r--r--OpenSim/Region/Environment/Scenes/InnerScene.cs13
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs18
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs17
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs2
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs14
5 files changed, 55 insertions, 9 deletions
diff --git a/OpenSim/Region/Environment/Scenes/InnerScene.cs b/OpenSim/Region/Environment/Scenes/InnerScene.cs
index abd3387..7e8259f 100644
--- a/OpenSim/Region/Environment/Scenes/InnerScene.cs
+++ b/OpenSim/Region/Environment/Scenes/InnerScene.cs
@@ -196,10 +196,15 @@ namespace OpenSim.Region.Environment.Scenes
196 /// If true, changes to the object will be reflected in its persisted data 196 /// If true, changes to the object will be reflected in its persisted data
197 /// If false, the persisted data will not be changed even if the object in the scene is changed 197 /// If false, the persisted data will not be changed even if the object in the scene is changed
198 /// </param> 198 /// </param>
199 /// <param name="alreadyPersisted">
200 /// If true, we won't persist this object until it changes
201 /// If false, we'll persist this object immediately
202 /// </param>
199 /// <returns> 203 /// <returns>
200 /// true if the object was added, false if an object with the same uuid was already in the scene 204 /// true if the object was added, false if an object with the same uuid was already in the scene
201 /// </returns> 205 /// </returns>
202 protected internal bool AddRestoredSceneObject(SceneObjectGroup sceneObject, bool attachToBackup) 206 protected internal bool AddRestoredSceneObject(
207 SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted)
203 { 208 {
204 sceneObject.RegionHandle = m_regInfo.RegionHandle; 209 sceneObject.RegionHandle = m_regInfo.RegionHandle;
205 sceneObject.SetScene(m_parentScene); 210 sceneObject.SetScene(m_parentScene);
@@ -211,6 +216,12 @@ namespace OpenSim.Region.Environment.Scenes
211 216
212 sceneObject.UpdateParentIDs(); 217 sceneObject.UpdateParentIDs();
213 218
219 if (!alreadyPersisted)
220 {
221 sceneObject.ForceInventoryPersistence();
222 sceneObject.HasGroupChanged = true;
223 }
224
214 return AddSceneObject(sceneObject, attachToBackup); 225 return AddSceneObject(sceneObject, attachToBackup);
215 } 226 }
216 227
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 1564556..fb931f4 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -1485,7 +1485,7 @@ namespace OpenSim.Region.Environment.Scenes
1485 List<SceneObjectGroup> PrimsFromDB = m_storageManager.DataStore.LoadObjects(regionID); 1485 List<SceneObjectGroup> PrimsFromDB = m_storageManager.DataStore.LoadObjects(regionID);
1486 foreach (SceneObjectGroup group in PrimsFromDB) 1486 foreach (SceneObjectGroup group in PrimsFromDB)
1487 { 1487 {
1488 AddRestoredSceneObject(group, true); 1488 AddRestoredSceneObject(group, true, true);
1489 SceneObjectPart rootPart = group.GetChildPart(group.UUID); 1489 SceneObjectPart rootPart = group.GetChildPart(group.UUID);
1490 rootPart.ObjectFlags &= ~(uint)LLObject.ObjectFlags.Scripted; 1490 rootPart.ObjectFlags &= ~(uint)LLObject.ObjectFlags.Scripted;
1491 rootPart.TrimPermissions(); 1491 rootPart.TrimPermissions();
@@ -1665,9 +1665,21 @@ namespace OpenSim.Region.Environment.Scenes
1665 /// Add an object into the scene that has come from storage 1665 /// Add an object into the scene that has come from storage
1666 /// </summary> 1666 /// </summary>
1667 /// <param name="sceneObject"></param> 1667 /// <param name="sceneObject"></param>
1668 public bool AddRestoredSceneObject(SceneObjectGroup sceneObject, bool attachToBackup) 1668 /// <param name="attachToBackup">
1669 /// If true, changes to the object will be reflected in its persisted data
1670 /// If false, the persisted data will not be changed even if the object in the scene is changed
1671 /// </param>
1672 /// <param name="alreadyPersisted">
1673 /// If true, we won't persist this object until it changes
1674 /// If false, we'll persist this object immediately
1675 /// </param>
1676 /// <returns>
1677 /// true if the object was added, false if an object with the same uuid was already in the scene
1678 /// </returns>
1679 public bool AddRestoredSceneObject(
1680 SceneObjectGroup sceneObject, bool attachToBackup, bool alreadyPersisted)
1669 { 1681 {
1670 return m_innerScene.AddRestoredSceneObject(sceneObject, attachToBackup); 1682 return m_innerScene.AddRestoredSceneObject(sceneObject, attachToBackup, alreadyPersisted);
1671 } 1683 }
1672 1684
1673 /// <summary> 1685 /// <summary>
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs
index 799cb41..8feb852 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs
@@ -39,6 +39,20 @@ namespace OpenSim.Region.Environment.Scenes
39 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 39 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
40 40
41 /// <summary> 41 /// <summary>
42 /// Force all task inventories of prims in the scene object to persist
43 /// </summary>
44 public void ForceInventoryPersistence()
45 {
46 lock (m_parts)
47 {
48 foreach (SceneObjectPart part in m_parts.Values)
49 {
50 part.ForceInventoryPersistence();
51 }
52 }
53 }
54
55 /// <summary>
42 /// Start the scripts contained in all the prims in this group. 56 /// Start the scripts contained in all the prims in this group.
43 /// </summary> 57 /// </summary>
44 public void CreateScriptInstances(int startParam, bool postOnRez) 58 public void CreateScriptInstances(int startParam, bool postOnRez)
@@ -53,6 +67,9 @@ namespace OpenSim.Region.Environment.Scenes
53 } 67 }
54 } 68 }
55 69
70 /// <summary>
71 /// Stop the scripts contained in all the prims in this group
72 /// </summary>
56 public void RemoveScriptInstances() 73 public void RemoveScriptInstances()
57 { 74 {
58 lock (m_parts) 75 lock (m_parts)
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
index 1b3d942..86e0caa 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs
@@ -1396,7 +1396,7 @@ namespace OpenSim.Region.Environment.Scenes
1396 } 1396 }
1397 1397
1398 /// <summary> 1398 /// <summary>
1399 /// 1399 /// Make a copy of the given part.
1400 /// </summary> 1400 /// </summary>
1401 /// <param name="part"></param> 1401 /// <param name="part"></param>
1402 /// <param name="cAgentID"></param> 1402 /// <param name="cAgentID"></param>
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs
index 005d872..d407392 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs
@@ -58,7 +58,15 @@ namespace OpenSim.Region.Environment.Scenes
58 /// <summary> 58 /// <summary>
59 /// Tracks whether inventory has changed since the last persistent backup 59 /// Tracks whether inventory has changed since the last persistent backup
60 /// </summary> 60 /// </summary>
61 private bool HasInventoryChanged; 61 protected bool HasInventoryChanged;
62
63 /// <summary>
64 /// Force the task inventory of this prim to persist at the next update sweep
65 /// </summary>
66 public void ForceInventoryPersistence()
67 {
68 HasInventoryChanged = true;
69 }
62 70
63 /// <summary> 71 /// <summary>
64 /// Reset LLUUIDs for all the items in the prim's inventory. This involves either generating 72 /// Reset LLUUIDs for all the items in the prim's inventory. This involves either generating
@@ -72,9 +80,7 @@ namespace OpenSim.Region.Environment.Scenes
72 lock (TaskInventory) 80 lock (TaskInventory)
73 { 81 {
74 if (0 == TaskInventory.Count) 82 if (0 == TaskInventory.Count)
75 {
76 return; 83 return;
77 }
78 84
79 HasInventoryChanged = true; 85 HasInventoryChanged = true;
80 ParentGroup.HasGroupChanged = true; 86 ParentGroup.HasGroupChanged = true;
@@ -597,7 +603,7 @@ namespace OpenSim.Region.Environment.Scenes
597 public void ProcessInventoryBackup(IRegionDataStore datastore) 603 public void ProcessInventoryBackup(IRegionDataStore datastore)
598 { 604 {
599 if (HasInventoryChanged) 605 if (HasInventoryChanged)
600 { 606 {
601 lock (TaskInventory) 607 lock (TaskInventory)
602 { 608 {
603 datastore.StorePrimInventory(UUID, TaskInventory.Values); 609 datastore.StorePrimInventory(UUID, TaskInventory.Values);