diff --git a/OpenSim/Region/Environment/Scenes/AsyncSceneObjectGroupDeleter.cs b/OpenSim/Region/Environment/Scenes/AsyncSceneObjectGroupDeleter.cs index 44c5a13d76..19ba5fa3e9 100644 --- a/OpenSim/Region/Environment/Scenes/AsyncSceneObjectGroupDeleter.cs +++ b/OpenSim/Region/Environment/Scenes/AsyncSceneObjectGroupDeleter.cs @@ -42,6 +42,7 @@ namespace OpenSim.Region.Environment.Scenes public IClientAPI remoteClient; public SceneObjectGroup objectGroup; public UUID folderID; + public bool permissionToDelete; } /// @@ -87,6 +88,7 @@ namespace OpenSim.Region.Environment.Scenes dtis.folderID = folderID; dtis.objectGroup = objectGroup; dtis.remoteClient = remoteClient; + dtis.permissionToDelete = permissionToDelete; m_inventoryDeletes.Enqueue(dtis); } @@ -94,8 +96,12 @@ namespace OpenSim.Region.Environment.Scenes if (Enabled) m_inventoryTicker.Start(); + // Visually remove it, even if it isnt really gone yet. This means that if we crash before the object + // has gone to inventory, it will reappear in the region again on restart instead of being lost. + // This is not ideal since the object will still be available for manipulation when it should be, but it's + // better than losing the object for now. if (permissionToDelete) - m_scene.DeleteSceneObject(objectGroup, false); + objectGroup.DeleteGroup(false); } private void InventoryRunDeleteTimer(object sender, ElapsedEventArgs e) @@ -126,7 +132,9 @@ namespace OpenSim.Region.Environment.Scenes try { - m_scene.DeleteToInventory(x.destination, x.folderID, x.objectGroup, x.remoteClient); + m_scene.DeleteToInventory(x.destination, x.folderID, x.objectGroup, x.remoteClient); + if (x.permissionToDelete) + m_scene.DeleteSceneObject(x.objectGroup, false); } catch (Exception e) { diff --git a/OpenSim/Region/Environment/Scenes/Tests/SceneObjectTests.cs b/OpenSim/Region/Environment/Scenes/Tests/SceneObjectTests.cs index e0d6a99149..1cc95fc8a6 100644 --- a/OpenSim/Region/Environment/Scenes/Tests/SceneObjectTests.cs +++ b/OpenSim/Region/Environment/Scenes/Tests/SceneObjectTests.cs @@ -97,8 +97,8 @@ namespace OpenSim.Region.Environment.Scenes.Tests IClientAPI client = SceneTestUtils.AddRootAgent(scene, agentId); scene.DeRezObject(client, part.LocalId, UUID.Zero, 9, UUID.Zero); - SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId); - Assert.That(retrievedPart, Is.Null); + SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId); + Assert.That(retrievedPart, Is.Not.Null); } } } \ No newline at end of file