Changed SceneObjectGroup to store parts with the fast and thread-safe MapAndArray collection

This commit is contained in:
John Hurliman
2010-09-16 17:30:46 -07:00
parent f5e3d5a33a
commit 860b2a502f
32 changed files with 1033 additions and 1180 deletions

View File

@@ -567,13 +567,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
so.RootPart.AttachedAvatar = avatar.UUID;
//Anakin Lohner bug #3839
lock (so.Children)
{
foreach (SceneObjectPart p in so.Children.Values)
{
p.AttachedAvatar = avatar.UUID;
}
}
SceneObjectPart[] parts = so.Parts;
for (int i = 0; i < parts.Length; i++)
parts[i].AttachedAvatar = avatar.UUID;
if (so.RootPart.PhysActor != null)
{

View File

@@ -594,10 +594,6 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
rootPart.Name = item.Name;
rootPart.Description = item.Description;
List<SceneObjectPart> partList = null;
lock (group.Children)
partList = new List<SceneObjectPart>(group.Children.Values);
group.SetGroup(remoteClient.ActiveGroupId, remoteClient);
if ((rootPart.OwnerID != item.Owner) || (item.CurrentPermissions & 16) != 0)
{
@@ -607,7 +603,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
if (m_Scene.Permissions.PropagatePermissions())
{
foreach (SceneObjectPart part in partList)
foreach (SceneObjectPart part in group.Parts)
{
part.EveryoneMask = item.EveryOnePermissions;
part.NextOwnerMask = item.NextPermissions;
@@ -618,7 +614,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
}
}
foreach (SceneObjectPart part in partList)
foreach (SceneObjectPart part in group.Parts)
{
if ((part.OwnerID != item.Owner) || (item.CurrentPermissions & 16) != 0)
{

View File

@@ -243,11 +243,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver
// to the same scene (when this is possible).
sceneObject.ResetIDs();
List<SceneObjectPart> partList = null;
lock (sceneObject.Children)
partList = new List<SceneObjectPart>(sceneObject.Children.Values);
foreach (SceneObjectPart part in partList)
foreach (SceneObjectPart part in sceneObject.Parts)
{
if (!ResolveUserUuid(part.CreatorID))
part.CreatorID = m_scene.RegionInfo.EstateSettings.EstateOwner;

View File

@@ -128,14 +128,9 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
group.SetOwnerId(remoteClient.AgentId);
group.SetRootPartOwner(part, remoteClient.AgentId, remoteClient.ActiveGroupId);
List<SceneObjectPart> partList = null;
lock (group.Children)
partList = new List<SceneObjectPart>(group.Children.Values);
if (m_scene.Permissions.PropagatePermissions())
{
foreach (SceneObjectPart child in partList)
foreach (SceneObjectPart child in group.Parts)
{
child.Inventory.ChangeInventoryOwner(remoteClient.AgentId);
child.TriggerScriptChangedEvent(Changed.OWNER);

View File

@@ -229,11 +229,7 @@ namespace OpenSim.Region.CoreModules.World.WorldMap
Color mapdotspot = Color.Gray; // Default color when prim color is white
// Loop over prim in group
List<SceneObjectPart> partList = null;
lock (mapdot.Children)
partList = new List<SceneObjectPart>(mapdot.Children.Values);
foreach (SceneObjectPart part in partList)
foreach (SceneObjectPart part in mapdot.Parts)
{
if (part == null)
continue;