Fix findbugs violations in md-sal - part 2
[controller.git] / opendaylight / md-sal / sal-dom-broker / src / main / java / org / opendaylight / controller / sal / dom / broker / ConsumerContextImpl.java
index 00cc8dc51ea694e1c931f2c7ead8626531e5475f..a4f67df0f05f2514ac5a1938808b8c7788edb303 100644 (file)
@@ -12,7 +12,7 @@ import com.google.common.base.Preconditions;
 import com.google.common.collect.ClassToInstanceMap;
 import com.google.common.collect.MutableClassToInstanceMap;
 import java.util.Collection;
-import javax.annotation.concurrent.GuardedBy;
+import java.util.concurrent.atomic.AtomicBoolean;
 import org.opendaylight.controller.sal.core.api.Broker.ConsumerSession;
 import org.opendaylight.controller.sal.core.api.BrokerService;
 import org.opendaylight.controller.sal.core.api.Consumer;
@@ -24,9 +24,8 @@ class ConsumerContextImpl implements ConsumerSession {
     private final ClassToInstanceMap<BrokerService> instantiatedServices = MutableClassToInstanceMap.create();
     private final Consumer consumer;
 
-    private BrokerImpl broker = null;
-    @GuardedBy("this")
-    private boolean closed = false;
+    private final BrokerImpl broker;
+    private final AtomicBoolean closed = new AtomicBoolean(false);
 
     ConsumerContextImpl(final Consumer provider, final BrokerImpl brokerImpl) {
         broker = brokerImpl;
@@ -52,27 +51,21 @@ class ConsumerContextImpl implements ConsumerSession {
 
     @Override
     public void close() {
-        synchronized (this) {
-            if (closed) {
-                return;
+        if (closed.compareAndSet(false, true)) {
+            Collection<BrokerService> toStop = instantiatedServices.values();
+            for (BrokerService brokerService : toStop) {
+                if (brokerService instanceof AbstractBrokerServiceProxy<?>) {
+                    ((AbstractBrokerServiceProxy<?>) brokerService).close();
+                }
             }
-            this.closed = true;
+            broker.consumerSessionClosed(this);
         }
-
-        Collection<BrokerService> toStop = instantiatedServices.values();
-        for (BrokerService brokerService : toStop) {
-            if (brokerService instanceof AbstractBrokerServiceProxy<?>) {
-                ((AbstractBrokerServiceProxy<?>) brokerService).close();
-            }
-        }
-        broker.consumerSessionClosed(this);
-        broker = null;
     }
 
 
     @Override
-    public synchronized boolean isClosed() {
-        return closed;
+    public boolean isClosed() {
+        return closed.get();
     }
 
     /**
@@ -95,6 +88,6 @@ class ConsumerContextImpl implements ConsumerSession {
     }
 
     protected final void checkNotClosed() {
-        Preconditions.checkState(!closed, "Session is closed.");
+        Preconditions.checkState(!closed.get(), "Session is closed.");
     }
 }