From ac7253e1b6d8b3cd3bd607010ad9711d9f278c5b Mon Sep 17 00:00:00 2001 From: David McKnight Date: Thu, 30 Jul 2009 15:05:06 +0000 Subject: [PATCH] [285151] [dstore] Potential threading problem in DataStore (open call) --- .../src/org/eclipse/dstore/core/model/DataStore.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/DataStore.java b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/DataStore.java index 1f14db8343b..aae8391c535 100644 --- a/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/DataStore.java +++ b/rse/plugins/org.eclipse.dstore.core/src/org/eclipse/dstore/core/model/DataStore.java @@ -28,6 +28,7 @@ * Noriaki Takatsu (IBM) - [245069] [dstore] dstoreTrace has no timestamp * David McKnight (IBM) - [282634] [dstore] IndexOutOfBoundsException on Disconnect * David McKnight (IBM) - [282599] [dstore] log folder that is not a hidden one + * David McKnight (IBM) - [285151] [dstore] Potential threading problem in DataStore (open call) *******************************************************************************/ package org.eclipse.dstore.core.model; @@ -2156,11 +2157,14 @@ public final class DataStore } // notify that preferences have changed + IDataStorePreferenceListener[] listeners = null; synchronized (_dataStorePreferenceListeners){ - for (int i = 0; i < _dataStorePreferenceListeners.size(); i++){ - IDataStorePreferenceListener listener = (IDataStorePreferenceListener)_dataStorePreferenceListeners.get(i); - listener.preferenceChanged(property, value); - } + listeners = (IDataStorePreferenceListener[])_dataStorePreferenceListeners.toArray(new IDataStorePreferenceListener[_dataStorePreferenceListeners.size()]); + } + + for (int i = 0; i < listeners.length; i++){ + IDataStorePreferenceListener listener = listeners[i]; + listener.preferenceChanged(property, value); } }