From accbe9abc4fb1dda0bfb4a7abe08308c6b0f25ba Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Mon, 12 Jun 2017 14:53:43 -0400 Subject: [PATCH] Fix concurrent mod exception with listeners. Change-Id: If5088b530606421b573359b7755a01e45e32f0a7 --- .../core/internal/LaunchBarManager.java | 58 +++++++++++-------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/LaunchBarManager.java b/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/LaunchBarManager.java index 9e78d132972..2749824e3b5 100644 --- a/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/LaunchBarManager.java +++ b/bundles/org.eclipse.launchbar.core/src/org/eclipse/launchbar/core/internal/LaunchBarManager.java @@ -610,11 +610,13 @@ public class LaunchBarManager implements ILaunchBarManager, ILaunchTargetListene private void fireActiveLaunchDescriptorChanged() { if (!initialized) return; - for (ILaunchBarListener listener : listeners) { - try { - listener.activeLaunchDescriptorChanged(activeLaunchDesc); - } catch (Exception e) { - Activator.log(e); + synchronized (listeners) { + for (ILaunchBarListener listener : listeners) { + try { + listener.activeLaunchDescriptorChanged(activeLaunchDesc); + } catch (Exception e) { + Activator.log(e); + } } } } @@ -673,11 +675,13 @@ public class LaunchBarManager implements ILaunchBarManager, ILaunchTargetListene private void fireActiveLaunchModeChanged() { if (!initialized) return; - for (ILaunchBarListener listener : listeners) { - try { - listener.activeLaunchModeChanged(activeLaunchMode); - } catch (Exception e) { - Activator.log(e); + synchronized (listeners) { + for (ILaunchBarListener listener : listeners) { + try { + listener.activeLaunchModeChanged(activeLaunchMode); + } catch (Exception e) { + Activator.log(e); + } } } } @@ -764,11 +768,13 @@ public class LaunchBarManager implements ILaunchBarManager, ILaunchTargetListene private void fireActiveLaunchTargetChanged() { if (!initialized) return; - for (ILaunchBarListener listener : listeners) { - try { - listener.activeLaunchTargetChanged(activeLaunchTarget); - } catch (Exception e) { - Activator.log(e); + synchronized (listeners) { + for (ILaunchBarListener listener : listeners) { + try { + listener.activeLaunchTargetChanged(activeLaunchTarget); + } catch (Exception e) { + Activator.log(e); + } } } } @@ -823,15 +829,19 @@ public class LaunchBarManager implements ILaunchBarManager, ILaunchTargetListene public void addListener(ILaunchBarListener listener) { if (listener == null) return; - if (!listeners.contains(listener)) // cannot add duplicates - listeners.add(listener); + synchronized (listeners) { + if (!listeners.contains(listener)) // cannot add duplicates + listeners.add(listener); + } } @Override public void removeListener(ILaunchBarListener listener) { if (listener == null) return; - listeners.remove(listener); + synchronized (listener) { + listeners.remove(listener); + } } @Override @@ -912,11 +922,13 @@ public class LaunchBarManager implements ILaunchBarManager, ILaunchTargetListene private void fireLaunchTargetsChanged() { if (!initialized) return; - for (ILaunchBarListener listener : listeners) { - try { - listener.launchTargetsChanged(); - } catch (Exception e) { - Activator.log(e); + synchronized (listeners) { + for (ILaunchBarListener listener : listeners) { + try { + listener.launchTargetsChanged(); + } catch (Exception e) { + Activator.log(e); + } } } }