diff --git a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/registration/DynamicItem.java b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/registration/DynamicItem.java index 4888f4f86d..cfb7bd97f5 100644 --- a/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/registration/DynamicItem.java +++ b/gerrit-extension-api/src/main/java/com/google/gerrit/extensions/registration/DynamicItem.java @@ -149,8 +149,9 @@ public class DynamicItem { */ public RegistrationHandle set(Provider impl, String pluginName) { final NamedProvider item = new NamedProvider(impl, pluginName); + NamedProvider old = null; while (!ref.compareAndSet(null, item)) { - NamedProvider old = ref.get(); + old = ref.get(); if (old != null) { if ("gerrit".equals(old.pluginName)) { if (ref.compareAndSet(old, item)) { @@ -163,10 +164,12 @@ public class DynamicItem { key.getTypeLiteral(), old.pluginName, pluginName)); } } + + final NamedProvider defaultItem = old; return new RegistrationHandle() { @Override public void remove() { - ref.compareAndSet(item, null); + ref.compareAndSet(item, defaultItem); } }; }