X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fdom%2Fbroker%2FConsumerContextImpl.java;h=0e0088f62a0a8c9eedf2c6dab28988ddbaa8de93;hp=721b1e5f0986b940b1094b2646b40243e5426831;hb=3f7ac86f0548d587e88ba43e03ec25cc83eed6cf;hpb=f3473ee42d45f1524dcafa6cc37e19e0393e9693 diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/ConsumerContextImpl.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/ConsumerContextImpl.java index 721b1e5f09..0e0088f62a 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/ConsumerContextImpl.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/sal/dom/broker/ConsumerContextImpl.java @@ -11,26 +11,24 @@ import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.ClassToInstanceMap; import com.google.common.collect.MutableClassToInstanceMap; +import java.util.Collection; +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; import org.opendaylight.controller.sal.dom.broker.osgi.AbstractBrokerServiceProxy; import org.opendaylight.controller.sal.dom.broker.osgi.ProxyFactory; -import javax.annotation.concurrent.GuardedBy; -import java.util.Collection; - +@Deprecated class ConsumerContextImpl implements ConsumerSession { - private final ClassToInstanceMap instantiatedServices = MutableClassToInstanceMap - .create(); + private final ClassToInstanceMap 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); - public ConsumerContextImpl(final Consumer provider, final BrokerImpl brokerImpl) { + ConsumerContextImpl(final Consumer provider, final BrokerImpl brokerImpl) { broker = brokerImpl; consumer = provider; } @@ -43,8 +41,8 @@ class ConsumerContextImpl implements ConsumerSession { return localProxy; } final Optional serviceImpl = broker.getGlobalService(service); - if(serviceImpl.isPresent()) { - final T ret = ProxyFactory.createProxy(null,serviceImpl.get()); + if (serviceImpl.isPresent()) { + final T ret = ProxyFactory.createProxy(null, serviceImpl.get()); instantiatedServices.putInstance(service, ret); return ret; } else { @@ -54,45 +52,43 @@ class ConsumerContextImpl implements ConsumerSession { @Override public void close() { - synchronized (this) { - if (closed) { - return; - } - this.closed = true; - } - - Collection toStop = instantiatedServices.values(); - for (BrokerService brokerService : toStop) { - if (brokerService instanceof AbstractBrokerServiceProxy) { - ((AbstractBrokerServiceProxy) brokerService).close(); + if (closed.compareAndSet(false, true)) { + Collection toStop = instantiatedServices.values(); + for (BrokerService brokerService : toStop) { + if (brokerService instanceof AbstractBrokerServiceProxy) { + ((AbstractBrokerServiceProxy) brokerService).close(); + } } + broker.consumerSessionClosed(this); } - broker.consumerSessionClosed(this); - broker = null; } @Override - public synchronized boolean isClosed() { - return closed; + public boolean isClosed() { + return closed.get(); } /** + * Gets broker. + * * @return the broker */ - protected final BrokerImpl getBrokerChecked() { + protected final BrokerImpl getBrokerChecked() { checkNotClosed(); return broker; } /** + * Gets consumer. + * * @return the _consumer */ public Consumer getConsumer() { return consumer; } - protected final void checkNotClosed() { - Preconditions.checkState(!closed, "Session is closed."); + protected final void checkNotClosed() { + Preconditions.checkState(!closed.get(), "Session is closed."); } }