diff options
Diffstat (limited to 'gerrit-sshd/src/main/java/com/google/gerrit/sshd/DispatchCommandProvider.java')
-rw-r--r-- | gerrit-sshd/src/main/java/com/google/gerrit/sshd/DispatchCommandProvider.java | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/DispatchCommandProvider.java b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/DispatchCommandProvider.java index e9a31c9285..c7594bc6d1 100644 --- a/gerrit-sshd/src/main/java/com/google/gerrit/sshd/DispatchCommandProvider.java +++ b/gerrit-sshd/src/main/java/com/google/gerrit/sshd/DispatchCommandProvider.java @@ -53,13 +53,17 @@ public class DispatchCommandProvider implements Provider<DispatchCommand> { public RegistrationHandle register(final CommandName name, final Provider<Command> cmd) { final ConcurrentMap<String, CommandProvider> m = getMap(); - if (m.putIfAbsent(name.value(), new CommandProvider(cmd, null)) != null) { + final CommandProvider commandProvider = new CommandProvider(cmd, null); + if (m.putIfAbsent(name.value(), commandProvider) != null) { throw new IllegalArgumentException(name.value() + " exists"); } return new RegistrationHandle() { @Override public void remove() { - m.remove(name.value(), cmd); + if (!m.remove(name.value(), commandProvider)) { + throw new IllegalStateException(String.format( + "can not unregister command: %s", name.value())); + } } }; } |