From 4e6e053c6ce4a29e6ee2bdf607d862a2b404a0f4 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 20 Jul 2017 14:47:14 -0400 Subject: [PATCH] Bug 520029 - Synchronize access to listeners in LaunchTargetManager. Change-Id: I339fe158341890caa95537b332da29717f7bc5a1 Signed-off-by: Roland Grunberg --- .../internal/target/LaunchTargetManager.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/target/LaunchTargetManager.java b/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/target/LaunchTargetManager.java index 2ad11c32936..66df11523bb 100644 --- a/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/target/LaunchTargetManager.java +++ b/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/target/LaunchTargetManager.java @@ -8,6 +8,7 @@ package org.eclipse.launchbar.core.internal.target; import java.util.ArrayList; +import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; @@ -35,7 +36,7 @@ public class LaunchTargetManager implements ILaunchTargetManager { private Map> targets; private Map typeElements; private Map typeProviders = new LinkedHashMap<>(); - private List listeners = new LinkedList<>(); + private List listeners = Collections.synchronizedList(new LinkedList<>()); private static final String DELIMETER1 = ","; //$NON-NLS-1$ private static final String DELIMETER2 = ":"; //$NON-NLS-1$ @@ -201,8 +202,10 @@ public class LaunchTargetManager implements ILaunchTargetManager { Activator.log(e); } - for (ILaunchTargetListener listener : listeners) { - listener.launchTargetAdded(target); + synchronized (listeners) { + for (ILaunchTargetListener listener : listeners) { + listener.launchTargetAdded(target); + } } return target; @@ -226,16 +229,20 @@ public class LaunchTargetManager implements ILaunchTargetManager { Activator.log(e); } - for (ILaunchTargetListener listener : listeners) { - listener.launchTargetRemoved(target); + synchronized (listeners) { + for (ILaunchTargetListener listener : listeners) { + listener.launchTargetRemoved(target); + } } } } @Override public void targetStatusChanged(ILaunchTarget target) { - for (ILaunchTargetListener listener : listeners) { - listener.launchTargetStatusChanged(target); + synchronized (listeners) { + for (ILaunchTargetListener listener : listeners) { + listener.launchTargetStatusChanged(target); + } } }