From 0f62eae6e9d5aab6fc620fdbc3ad079ce1c98d0a Mon Sep 17 00:00:00 2001 From: Date: Thu, 5 Jun 2008 20:25:59 +0000 Subject: [PATCH] Fixes a locking issue introduced in original patch for LIBOMV-102 git-svn-id: http://libopenmetaverse.googlecode.com/svn/trunk@1894 52acb1d6-8a22-11de-b505-999d5b087335 --- libsecondlife/ObjectManager.cs | 37 +++++++++++++++++----------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/libsecondlife/ObjectManager.cs b/libsecondlife/ObjectManager.cs index b7e4027b..9a6dd801 100644 --- a/libsecondlife/ObjectManager.cs +++ b/libsecondlife/ObjectManager.cs @@ -2128,10 +2128,9 @@ namespace libsecondlife if (Client.Settings.OBJECT_TRACKING) { - uint localID; - lock (simulator.ObjectsPrimitives.Dictionary) { + uint localID; for (int i = 0; i < kill.ObjectData.Length; i++) { localID = kill.ObjectData[i].ID; @@ -2142,34 +2141,35 @@ namespace libsecondlife simulator.ObjectsPrimitives.Dictionary.Remove(localID); } - foreach (Primitive prim in simulator.ObjectsPrimitives.Dictionary.Values) + simulator.ObjectsPrimitives.ForEach(delegate(Primitive prim) { if (prim.ParentID == localID) { FireOnObjectKilled(simulator, prim.LocalID); simulator.ObjectsPrimitives.Dictionary.Remove(prim.LocalID); } - } + }); } } } + if (Client.Settings.AVATAR_TRACKING) { - uint localID; - - lock (simulator.ObjectsAvatars.Dictionary) + lock (simulator.ObjectsPrimitives.Dictionary) { - for (int i = 0; i < kill.ObjectData.Length; i++) + lock (simulator.ObjectsAvatars.Dictionary) { - localID = kill.ObjectData[i].ID; - - if (simulator.ObjectsAvatars.Dictionary.ContainsKey(localID)) - simulator.ObjectsAvatars.Dictionary.Remove(localID); - - lock (simulator.ObjectsPrimitives.Dictionary) + uint localID; + for (int i = 0; i < kill.ObjectData.Length; i++) { + localID = kill.ObjectData[i].ID; + + if (simulator.ObjectsAvatars.Dictionary.ContainsKey(localID)) + simulator.ObjectsAvatars.Dictionary.Remove(localID); + List rootPrims = new List(); - foreach (Primitive prim in simulator.ObjectsPrimitives.Dictionary.Values) + + simulator.ObjectsPrimitives.ForEach(delegate(Primitive prim) { if (prim.ParentID == localID) { @@ -2177,15 +2177,16 @@ namespace libsecondlife simulator.ObjectsPrimitives.Dictionary.Remove(prim.LocalID); rootPrims.Add(prim.LocalID); } - } - foreach (Primitive prim in simulator.ObjectsPrimitives.Dictionary.Values) + }); + + simulator.ObjectsPrimitives.ForEach(delegate(Primitive prim) { if (rootPrims.Contains(prim.ParentID)) { FireOnObjectKilled(simulator, prim.LocalID); simulator.ObjectsPrimitives.Dictionary.Remove(prim.LocalID); } - } + }); } } }