diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index dc6509d5ac..99c2abf7a8 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -29,6 +29,7 @@ using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
+using System.Linq;
using System.Threading;
using System.Xml;
using System.Xml.Serialization;
@@ -1236,26 +1237,27 @@ namespace OpenSim.Region.Framework.Scenes
/// If true then deletion is not broadcast to clients
public void DeleteGroup(bool silent)
{
- lock (m_parts)
- {
- foreach (SceneObjectPart part in m_parts.Values)
- {
-// part.Inventory.RemoveScriptInstances();
- Scene.ForEachScenePresence(delegate(ScenePresence avatar)
- {
- if (avatar.ParentID == LocalId)
- {
- avatar.StandUp();
- }
+ List parts;
- if (!silent)
- {
- part.UpdateFlag = 0;
- if (part == m_rootPart)
- avatar.ControllingClient.SendKillObject(m_regionHandle, part.LocalId);
- }
- });
- }
+ lock (m_parts)
+ parts = m_parts.Values.ToList();
+
+ foreach (SceneObjectPart part in parts)
+ {
+ Scene.ForEachScenePresence(delegate(ScenePresence avatar)
+ {
+ if (avatar.ParentID == LocalId)
+ {
+ avatar.StandUp();
+ }
+
+ if (!silent)
+ {
+ part.UpdateFlag = 0;
+ if (part == m_rootPart)
+ avatar.ControllingClient.SendKillObject(m_regionHandle, part.LocalId);
+ }
+ });
}
}