make sog, sop and sop inventory IDisposable
parent
dd55a3d19c
commit
8b77162020
|
@ -876,7 +876,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
|||
|
||||
m_scene.DeleteSceneObject(so, false, false);
|
||||
so.RemoveScriptInstances(true);
|
||||
so.Clear();
|
||||
so.Dispose();
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -1213,7 +1213,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
|||
|
||||
// Now, remove the scripts
|
||||
so.RemoveScriptInstances(true);
|
||||
so.Clear();
|
||||
so.Dispose();
|
||||
}
|
||||
|
||||
protected SceneObjectGroup RezSingleAttachmentFromInventoryInternal(
|
||||
|
|
|
@ -2795,7 +2795,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
// use this to mean also full delete
|
||||
if (removeScripts)
|
||||
group.Clear();
|
||||
group.Dispose();
|
||||
partList = null;
|
||||
// m_log.DebugFormat("[SCENE]: Exit DeleteSceneObject() for {0} {1}", group.Name, group.UUID);
|
||||
}
|
||||
|
|
|
@ -106,7 +106,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// A scene object group is conceptually an object in the scene. The object is constituted of SceneObjectParts
|
||||
/// (often known as prims), one of which is considered the root part.
|
||||
/// </summary>
|
||||
public partial class SceneObjectGroup : EntityBase, ISceneObject
|
||||
public partial class SceneObjectGroup : EntityBase, ISceneObject, IDisposable
|
||||
{
|
||||
// Axis selection bitmask used by SetAxisRotation()
|
||||
// Just happen to be the same bits used by llSetStatus() and defined in ScriptBaseClass.
|
||||
|
@ -907,7 +907,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
avsToCrossFar.Clear();
|
||||
avsToCross.Clear();
|
||||
sog.RemoveScriptInstances(true);
|
||||
sog.Clear();
|
||||
sog.Dispose();
|
||||
return sog;
|
||||
}
|
||||
else
|
||||
|
@ -1362,6 +1362,42 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
{
|
||||
}
|
||||
|
||||
~SceneObjectGroup()
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
private bool disposed = false;
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
protected void Dispose(bool disposing)
|
||||
{
|
||||
// Check to see if Dispose has already been called.
|
||||
if (!disposed)
|
||||
{
|
||||
IsDeleted = true;
|
||||
|
||||
SceneObjectPart[] parts = m_parts.GetArray();
|
||||
for(int i= 0; i < parts.Length; ++i)
|
||||
parts[i].Dispose();
|
||||
|
||||
m_parts.Clear();
|
||||
m_sittingAvatars.Clear();
|
||||
// m_rootPart = null;
|
||||
|
||||
m_targets.Clear();
|
||||
m_partsNameToLinkMap.Clear();
|
||||
|
||||
disposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void LoadScriptState(XmlDocument doc)
|
||||
{
|
||||
XmlNodeList nodes = doc.GetElementsByTagName("SavedScriptState");
|
||||
|
@ -2412,7 +2448,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
});
|
||||
|
||||
backup_group.Clear();
|
||||
backup_group.Dispose();
|
||||
backup_group = null;
|
||||
}
|
||||
}
|
||||
|
@ -5277,17 +5313,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
InvalidateEffectivePerms();
|
||||
}
|
||||
|
||||
// clear some references to easy cg
|
||||
public void Clear()
|
||||
{
|
||||
m_parts.Clear();
|
||||
m_sittingAvatars.Clear();
|
||||
// m_rootPart = null;
|
||||
|
||||
m_targets.Clear();
|
||||
m_partsNameToLinkMap.Clear();
|
||||
}
|
||||
|
||||
private Dictionary<string,int> m_partsNameToLinkMap = new Dictionary<string, int>();
|
||||
private string GetLinkNumber_lastname;
|
||||
private int GetLinkNumber_lastnumber;
|
||||
|
|
|
@ -93,7 +93,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
#endregion Enumerations
|
||||
|
||||
public class SceneObjectPart : ISceneEntity
|
||||
public class SceneObjectPart : ISceneEntity, IDisposable
|
||||
{
|
||||
/// <value>
|
||||
/// Denote all sides of the prim
|
||||
|
@ -454,6 +454,40 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
AggregateInnerPerms();
|
||||
}
|
||||
|
||||
~SceneObjectPart()
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
private bool disposed = false;
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
protected void Dispose(bool disposing)
|
||||
{
|
||||
// Check to see if Dispose has already been called.
|
||||
if (!disposed)
|
||||
{
|
||||
if (KeyframeMotion != null)
|
||||
{
|
||||
KeyframeMotion.Delete();
|
||||
KeyframeMotion = null;
|
||||
}
|
||||
if (PhysActor != null)
|
||||
RemoveFromPhysics();
|
||||
|
||||
if (m_inventory != null)
|
||||
{
|
||||
m_inventory.Dispose();
|
||||
m_inventory = null;
|
||||
}
|
||||
disposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Constructors
|
||||
|
||||
#region XML Schema
|
||||
|
|
|
@ -43,7 +43,7 @@ using PermissionMask = OpenSim.Framework.PermissionMask;
|
|||
|
||||
namespace OpenSim.Region.Framework.Scenes
|
||||
{
|
||||
public class SceneObjectPartInventory : IEntityInventory
|
||||
public class SceneObjectPartInventory : IEntityInventory , IDisposable
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
|
@ -125,6 +125,32 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
m_part = part;
|
||||
}
|
||||
|
||||
~SceneObjectPartInventory()
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
private bool disposed = false;
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
protected void Dispose(bool disposing)
|
||||
{
|
||||
// Check to see if Dispose has already been called.
|
||||
if (!disposed)
|
||||
{
|
||||
if (m_items != null)
|
||||
{
|
||||
m_items.Dispose();
|
||||
m_items = null;
|
||||
}
|
||||
disposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Force the task inventory of this prim to persist at the next update sweep
|
||||
/// </summary>
|
||||
|
|
Loading…
Reference in New Issue