Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/internal/services/PathMapService.java')
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/internal/services/PathMapService.java24
1 files changed, 23 insertions, 1 deletions
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<PathMapRule> rulesList = new ArrayList<PathMapRule>();
@@ -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<PathMapRule> rulesList = new ArrayList<PathMapRule>();
@@ -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<PathMapRule> rulesList = new ArrayList<PathMapRule>();
// Get the launch configuration for that peer model
@@ -183,6 +202,9 @@ public class PathMapService extends AbstractService implements IPathMapService {
});
}
}
+
+ // Release the lock
+ lock.unlock();
}
/**

Back to the top