diff --git a/OpenSim/Framework/DoubleDictionaryThreadAbortSafe.cs b/OpenSim/Framework/DoubleDictionaryThreadAbortSafe.cs index e4c85e412c..5b9a45c009 100644 --- a/OpenSim/Framework/DoubleDictionaryThreadAbortSafe.cs +++ b/OpenSim/Framework/DoubleDictionaryThreadAbortSafe.cs @@ -329,28 +329,12 @@ namespace OpenSim.Framework public void ForEach(Action action) { - bool gotLock = false; + TValue[] values = GetArray(); + if(values == null || values.Length == 0) + return; - try - { - // Avoid an asynchronous Thread.Abort() from possibly never existing an acquired lock by placing - // the acquision inside the main try. The inner finally block is needed because thread aborts cannot - // interrupt code in these blocks (hence gotLock is guaranteed to be set correctly). - try {} - finally - { - rwLock.EnterReadLock(); - gotLock = true; - } - - foreach (TValue value in Dictionary1.Values) - action(value); - } - finally - { - if (gotLock) - rwLock.ExitReadLock(); - } + foreach (TValue value in values) + action(value); } public void ForEach(Action> action)