From 0b1faf490e4f89c8321e02c43e5109fd25e60119 Mon Sep 17 00:00:00 2001 From: Alexandre Montplaisir Date: Mon, 15 Jun 2015 14:33:48 -0400 Subject: [PATCH] common: Concurrency fixes in TraceCompassActivator The TraceCompassActivator class (which can be used as base for any Activator in every plugin) tracks all the loaded activators in a map. Add a bit of synchronization to make sure this map cannot be victim of unexpected concurrent accesses. Change-Id: Ia94899dfb140a5bf740e3cc6343f6d43579dd777 Signed-off-by: Alexandre Montplaisir Reviewed-on: https://git.eclipse.org/r/50752 Reviewed-by: Hudson CI Reviewed-by: Matthew Khouzam --- .../common/core/TraceCompassActivator.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/common/org.eclipse.tracecompass.common.core/src/org/eclipse/tracecompass/common/core/TraceCompassActivator.java b/common/org.eclipse.tracecompass.common.core/src/org/eclipse/tracecompass/common/core/TraceCompassActivator.java index 94b2138483..5b494affce 100644 --- a/common/org.eclipse.tracecompass.common.core/src/org/eclipse/tracecompass/common/core/TraceCompassActivator.java +++ b/common/org.eclipse.tracecompass.common.core/src/org/eclipse/tracecompass/common/core/TraceCompassActivator.java @@ -12,6 +12,9 @@ package org.eclipse.tracecompass.common.core; +import static org.eclipse.tracecompass.common.core.NonNullUtils.checkNotNull; + +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -34,7 +37,7 @@ public abstract class TraceCompassActivator extends Plugin { /** Map of all the registered activators, indexed by plugin ID */ private static final Map ACTIVATORS = - new HashMap<>(); + checkNotNull(Collections.synchronizedMap(new HashMap())); /** This instance's plug-in ID */ private final String fPluginId; @@ -105,10 +108,12 @@ public abstract class TraceCompassActivator extends Plugin { public final void start(@Nullable BundleContext context) throws Exception { super.start(context); String id = this.getPluginId(); - if (ACTIVATORS.containsKey(id)) { - logError("Duplicate Activator ID : " + id); //$NON-NLS-1$ + synchronized (ACTIVATORS) { + if (ACTIVATORS.containsKey(id)) { + logError("Duplicate Activator ID : " + id); //$NON-NLS-1$ + } + ACTIVATORS.put(id, this); } - ACTIVATORS.put(id, this); startActions(); } -- 2.34.1