diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index df08074ed9..0dc8f7bc5a 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -195,6 +195,8 @@ namespace OpenSim.Region.Framework.Scenes get { return m_hasGroupChanged; } } + public bool TemporaryInstance = false; + private bool m_groupContainsForeignPrims = false; /// @@ -3294,9 +3296,8 @@ namespace OpenSim.Region.Framework.Scenes // Now that we've aquired all of the old SOG's parts, remove the old SOG from the scene. m_scene.UnlinkSceneObject(objectGroup, true); - objectGroup.IsDeleted = true; - - objectGroup.m_parts.Clear(); + objectGroup.m_parts.Clear(); // do not dispose the parts moved to new group + objectGroup.Dispose(); // Can't do this yet since backup still makes use of the root part without any synchronization // objectGroup.m_rootPart = null; diff --git a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs index eb31d552aa..9b0744e1f5 100644 --- a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs +++ b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs @@ -420,6 +420,8 @@ namespace OpenSim.Region.Framework.Scenes m_log.ErrorFormat("[UUID GATHERER]: Failed to get part - {0}", e); } } + if(sceneObject.TemporaryInstance) + sceneObject.Dispose(); } /// @@ -782,14 +784,20 @@ namespace OpenSim.Region.Framework.Scenes if (CoalescedSceneObjectsSerializer.TryFromXml(xml, out coa)) { foreach (SceneObjectGroup sog in coa.Objects) + { + sog.TemporaryInstance = true; AddForInspection(sog); + } } else { SceneObjectGroup sog = SceneObjectSerializer.FromOriginalXmlFormat(xml); if (null != sog) + { + sog.TemporaryInstance = true; AddForInspection(sog); + } } }