diff --git a/OpenSim/Region/Environment/Scenes/EventManager.cs b/OpenSim/Region/Environment/Scenes/EventManager.cs index 618e6b578f..bba7eeddb5 100644 --- a/OpenSim/Region/Environment/Scenes/EventManager.cs +++ b/OpenSim/Region/Environment/Scenes/EventManager.cs @@ -52,7 +52,7 @@ namespace OpenSim.Region.Environment.Scenes public event OnTerrainTickDelegate OnTerrainTick; - public delegate void OnBackupDelegate(IRegionDataStore datastore); + public delegate void OnBackupDelegate(IRegionDataStore datastore, bool forceBackup); public event OnBackupDelegate OnBackup; @@ -504,7 +504,7 @@ namespace OpenSim.Region.Environment.Scenes handlerBackup = OnBackup; if (handlerBackup != null) { - handlerBackup(dstore); + handlerBackup(dstore, false); } } diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs index cb9aee25b0..bc80d56801 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs @@ -1686,6 +1686,10 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectGroup grp = part.ParentGroup; + //force a database backup/update on this SceneObjectGroup + //So that we know the database is upto date, for when deleting the object from it + ForceSceneObjectBackup(grp); + bool permissionToTake = false; bool permissionToDelete = false; diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 32bd9aa0e7..194d782f92 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -728,7 +728,7 @@ namespace OpenSim.Region.Environment.Scenes { if (!entity.IsDeleted && entity is SceneObjectGroup && ((SceneObjectGroup)entity).HasGroupChanged) { - ((SceneObjectGroup)entity).ProcessBackup(m_storageManager.DataStore); + ((SceneObjectGroup)entity).ProcessBackup(m_storageManager.DataStore, false); } } @@ -1052,6 +1052,14 @@ namespace OpenSim.Region.Environment.Scenes } } + public void ForceSceneObjectBackup(SceneObjectGroup group) + { + if (group != null) + { + group.ProcessBackup(m_storageManager.DataStore, true); + } + } + public void AddReturn(UUID agentID, string objectName, Vector3 location, string reason) { lock (m_returns) diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs index 9c29338d77..5ae95eecdd 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs @@ -1222,7 +1222,7 @@ namespace OpenSim.Region.Environment.Scenes /// Processes backup. /// /// - public void ProcessBackup(IRegionDataStore datastore) + public void ProcessBackup(IRegionDataStore datastore, bool forcedBackup) { if (!m_isBackedUp) return; @@ -1265,7 +1265,7 @@ namespace OpenSim.Region.Environment.Scenes if (HasGroupChanged) { // don't backup while it's selected or you're asking for changes mid stream. - if (isTimeToPersist()) + if ((isTimeToPersist()) || (forcedBackup)) { m_log.DebugFormat( "[SCENE]: Storing {0}, {1} in {2}",