[KARAF-3257] Better synchronization in CommandProcessorImpl
Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/b791d923 Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/b791d923 Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/b791d923 Branch: refs/heads/karaf-2.x Commit: b791d923703f70f8f3b7f7501744ffb6bb86237b Parents: fbf557b Author: Guillaume Nodet <[email protected]> Authored: Mon Oct 27 17:29:24 2014 +0100 Committer: Guillaume Nodet <[email protected]> Committed: Thu Feb 26 11:38:57 2015 +0100 ---------------------------------------------------------------------- .../felix/gogo/runtime/CommandProcessorImpl.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/b791d923/shell/console/src/main/java/org/apache/felix/gogo/runtime/CommandProcessorImpl.java ---------------------------------------------------------------------- diff --git a/shell/console/src/main/java/org/apache/felix/gogo/runtime/CommandProcessorImpl.java b/shell/console/src/main/java/org/apache/felix/gogo/runtime/CommandProcessorImpl.java index 72cff88..1380bc0 100644 --- a/shell/console/src/main/java/org/apache/felix/gogo/runtime/CommandProcessorImpl.java +++ b/shell/console/src/main/java/org/apache/felix/gogo/runtime/CommandProcessorImpl.java @@ -153,11 +153,14 @@ public class CommandProcessorImpl implements CommandProcessor Object cmd = null; if (cmdMap != null && !cmdMap.isEmpty()) { - for (Entry<Object, Integer> e : cmdMap.entrySet()) + synchronized (cmdMap) { - if (cmd == null || e.getValue() > cmdMap.get(cmd)) + for (Entry<Object, Integer> e : cmdMap.entrySet()) { - cmd = e.getKey(); + if (cmd == null || e.getValue() > cmdMap.get(cmd)) + { + cmd = e.getKey(); + } } } } @@ -219,7 +222,10 @@ public class CommandProcessorImpl implements CommandProcessor commands.putIfAbsent(key, new LinkedHashMap<Object, Integer>()); cmdMap = commands.get(key); } - cmdMap.put(target, ranking); + synchronized (cmdMap) + { + cmdMap.put(target, ranking); + } } public void removeCommand(String scope, String function) @@ -236,7 +242,10 @@ public class CommandProcessorImpl implements CommandProcessor Map<Object, Integer> cmdMap = commands.get(key); if (cmdMap != null) { - cmdMap.remove(target); + synchronized (cmdMap) + { + cmdMap.remove(target); + } } }
