diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs
index 40c7a6940c..fbda830e76 100644
--- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs
+++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveReadRequest.cs
@@ -112,6 +112,9 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
if (failedAssetRestores > 0)
m_log.ErrorFormat("[ARCHIVER]: Failed to load {0} assets", failedAssetRestores);
+ m_log.Info("[ARCHIVER]: Clearing all existing scene objects");
+ m_scene.DeleteAllSceneObjects();
+
// Reload serialized prims
m_log.InfoFormat("[ARCHIVER]: Loading {0} scene objects. Please wait.", serialisedSceneObjects.Count);
@@ -122,6 +125,8 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
{
SceneObjectGroup sceneObject = serialiser.LoadGroupFromXml2(m_scene, serialisedSceneObject);
+ // TODO: Change object creator/owner here
+
if (null != sceneObject)
sceneObjects.Add(sceneObject);
}
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index a6a526450e..ad9646f04c 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -1683,6 +1683,23 @@ namespace OpenSim.Region.Environment.Scenes
return m_innerScene.AddNewSceneObject(sceneObject, attachToBackup);
}
+ ///
+ /// Delete every object from the scene
+ ///
+ public void DeleteAllSceneObjects()
+ {
+ lock (Entities)
+ {
+ ICollection entities = new List(Entities.Values);
+
+ foreach (EntityBase e in entities)
+ {
+ if (e is SceneObjectGroup)
+ DeleteSceneObject((SceneObjectGroup)e);
+ }
+ }
+ }
+
///
/// Delete the given object from the scene.
///