Restore gerrit-provided DynamicItem when plugin unloads

Change-Id: I21db4f146916dd129e306fdc3416b9acae2e453b
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 4888f4f..cfb7bd9 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 RegistrationHandle set(Provider<T> impl, String pluginName) {
     final NamedProvider<T> item = new NamedProvider<T>(impl, pluginName);
+    NamedProvider<T> old = null;
     while (!ref.compareAndSet(null, item)) {
-      NamedProvider<T> old = ref.get();
+      old = ref.get();
       if (old != null) {
         if ("gerrit".equals(old.pluginName)) {
           if (ref.compareAndSet(old, item)) {
@@ -163,10 +164,12 @@
             key.getTypeLiteral(), old.pluginName, pluginName));
       }
     }
+
+    final NamedProvider<T> defaultItem = old;
     return new RegistrationHandle() {
       @Override
       public void remove() {
-        ref.compareAndSet(item, null);
+        ref.compareAndSet(item, defaultItem);
       }
     };
   }