Rework ClusterSingletonServiceGroupImpl locking
[mdsal.git] / singleton-service / mdsal-singleton-dom-impl / src / main / java / org / opendaylight / mdsal / singleton / dom / impl / AbstractClusterSingletonServiceProviderImpl.java
index c65fb7e45b27819a473db7c3f69c48f4f015c8a6..ab0a1ba4db86aa8eeab1447d16e8e406b8522d79 100644 (file)
@@ -150,18 +150,20 @@ public abstract class AbstractClusterSingletonServiceProviderImpl<P extends Path
         final ListenableFuture<?> future;
         synchronized (this) {
             final ClusterSingletonServiceGroup<P, E, C> lookup = verifyNotNull(serviceGroupMap.get(serviceIdentifier));
-            if (!lookup.unregisterService(reg)) {
+            future = lookup.unregisterService(reg);
+            if (future == null) {
                 return;
             }
 
             // Close the group and replace it with a placeholder
             LOG.debug("Closing service group {}", serviceIdentifier);
-            future = lookup.closeClusterSingletonGroup();
             placeHolder = new PlaceholderGroup<>(lookup, future);
 
             final String identifier = reg.getInstance().getIdentifier().getValue();
             verify(serviceGroupMap.replace(identifier, lookup, placeHolder));
             LOG.debug("Replaced group {} with {}", serviceIdentifier, placeHolder);
+
+            lookup.closeClusterSingletonGroup();
         }
 
         future.addListener(() -> finishShutdown(placeHolder), MoreExecutors.directExecutor());