From 80ebc946017a635e15879efd5770c6cd03e42208 Mon Sep 17 00:00:00 2001 From: Uwe Stieber Date: Wed, 2 Oct 2013 12:09:22 +0200 Subject: Target Explorer: Make the path map server thread safe --- .../core/internal/services/PathMapService.java | 24 +++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core') diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/internal/services/PathMapService.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/internal/services/PathMapService.java index b29d5c639..3ce3dc023 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/internal/services/PathMapService.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/internal/services/PathMapService.java @@ -14,6 +14,8 @@ import java.util.Arrays; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.CoreException; @@ -45,6 +47,8 @@ import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerModelProvider; * Path map service implementation. */ public class PathMapService extends AbstractService implements IPathMapService { + // Lock to handle multi thread access + private final Lock lock = new ReentrantLock(); /* (non-Javadoc) * @see org.eclipse.tcf.te.tcf.core.interfaces.IPathMapService#getPathMap(java.lang.Object) @@ -54,6 +58,9 @@ public class PathMapService extends AbstractService implements IPathMapService { Assert.isTrue(!Protocol.isDispatchThread(), "Illegal Thread Access"); //$NON-NLS-1$ Assert.isNotNull(context); + // Acquire the lock before accessing the path mappings + lock.lock(); + PathMapRule[] rules = null; List rulesList = new ArrayList(); @@ -88,6 +95,9 @@ public class PathMapService extends AbstractService implements IPathMapService { rules = rulesList.toArray(new PathMapRule[rulesList.size()]); } + // Release the lock + lock.unlock(); + return rules; } @@ -101,6 +111,9 @@ public class PathMapService extends AbstractService implements IPathMapService { Assert.isNotNull(source); Assert.isNotNull(destination); + // Acquire the lock before accessing the path mappings + lock.lock(); + PathMapRule rule = null; List rulesList = new ArrayList(); @@ -144,7 +157,10 @@ public class PathMapService extends AbstractService implements IPathMapService { } } - return rule; + // Release the lock + lock.unlock(); + + return rule; } /* (non-Javadoc) @@ -156,6 +172,9 @@ public class PathMapService extends AbstractService implements IPathMapService { Assert.isNotNull(context); Assert.isNotNull(rule); + // Acquire the lock before accessing the path mappings + lock.lock(); + List rulesList = new ArrayList(); // Get the launch configuration for that peer model @@ -183,6 +202,9 @@ public class PathMapService extends AbstractService implements IPathMapService { }); } } + + // Release the lock + lock.unlock(); } /** -- cgit v1.2.3