From 0ee69707ea8c0948b79aeba5dbe078fe28dc6482 Mon Sep 17 00:00:00 2001
From: Justin Clarke Casey
Date: Sat, 24 May 2008 23:11:07 +0000
Subject: * Refactor: Collapse some multiple remove object paths * Push some
delete functionality into InnerScene to match what's already there for adding
objects
---
OpenSim/Region/Environment/Scenes/Scene.cs | 71 ++++++++++++------------------
1 file changed, 29 insertions(+), 42 deletions(-)
(limited to 'OpenSim/Region/Environment/Scenes/Scene.cs')
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index bbe8bd9..e30813c 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -1335,22 +1335,40 @@ namespace OpenSim.Region.Environment.Scenes
public void AddSceneObject(SceneObjectGroup sceneObject)
{
m_innerScene.AddSceneObject(sceneObject);
- }
+ }
///
- /// Remove an object from the scene
+ /// Delete this object from the scene.
///
- ///
- public void RemoveSceneObject(SceneObjectGroup sceneObject)
+ ///
+ public void DeleteSceneObject(SceneObjectGroup group)
{
- if (Entities.ContainsKey(sceneObject.UUID))
+ SceneObjectPart rootPart = (group).GetChildPart(group.UUID);
+ if (rootPart.PhysActor != null)
+ {
+ PhysicsScene.RemovePrim(rootPart.PhysActor);
+ rootPart.PhysActor = null;
+ }
+
+ m_storageManager.DataStore.RemoveObject(group.UUID, m_regInfo.RegionID);
+ group.DeleteGroup();
+
+ if (m_innerScene.DeleteSceneObject(group.UUID))
{
- EventManager.TriggerObjectBeingRemovedFromScene(sceneObject);
- Entities.Remove(sceneObject.UUID);
+ EventManager.TriggerObjectBeingRemovedFromScene(group);
EventManager.TriggerParcelPrimCountTainted();
- m_innerScene.RemoveAPrimCount();
}
- }
+
+ group.DeleteParts();
+
+ // In case anybody else retains a reference to this group, signal deletion by changing the name
+ // to null. We can't zero out the UUID because this is taken from the root part, which has already
+ // been removed.
+ // FIXME: This is a really poor temporary solution, since it still leaves plenty of scope for race
+ // conditions where a user deletes an entity while it is being stored. Really, the update
+ // code needs a redesign.
+ group.Name = null;
+ }
public void LoadPrimsFromXml(string fileName, bool newIdsFlag, LLVector3 loadOffset)
{
@@ -1411,7 +1429,7 @@ namespace OpenSim.Region.Environment.Scenes
// We remove the object here
try
{
- DeleteSceneObjectGroup(grp);
+ DeleteSceneObject(grp);
}
catch (Exception)
{
@@ -1473,7 +1491,7 @@ namespace OpenSim.Region.Environment.Scenes
// We remove the object here
try
{
- DeleteSceneObjectGroup(grp);
+ DeleteSceneObject(grp);
}
catch (Exception)
{
@@ -3142,37 +3160,6 @@ namespace OpenSim.Region.Environment.Scenes
}
///
- /// Delete this object from the scene.
- ///
- ///
- public void DeleteSceneObjectGroup(SceneObjectGroup group)
- {
- SceneObjectPart rootPart = (group).GetChildPart(group.UUID);
- if (rootPart.PhysActor != null)
- {
- PhysicsScene.RemovePrim(rootPart.PhysActor);
- rootPart.PhysActor = null;
- }
-
- m_storageManager.DataStore.RemoveObject(group.UUID, m_regInfo.RegionID);
- group.DeleteGroup();
-
- lock (Entities)
- {
- RemoveSceneObject(group);
- }
- group.DeleteParts();
-
- // In case anybody else retains a reference to this group, signal deletion by changing the name
- // to null. We can't zero out the UUID because this is taken from the root part, which has already
- // been removed.
- // FIXME: This is a really poor temporary solution, since it still leaves plenty of scope for race
- // conditions where a user deletes an entity while it is being stored. Really, the update
- // code needs a redesign.
- group.Name = null;
- }
-
- ///
///
///
///
--
cgit v1.1