X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=netconf%2Fnetconf-topology-singleton%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Ftopology%2Fsingleton%2Fimpl%2FNetconfTopologyContext.java;h=11cd117b1ec3501015fe2689704d3762c1bda52a;hb=d682d29c57e64070078813dd1e70883a4ba258ee;hp=0ac355d6dc0e4b53059e953b43d474cbd21b2ac4;hpb=5defe99f336b51d4e96473aff6de4b9e6af8cb34;p=netconf.git diff --git a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyContext.java b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyContext.java index 0ac355d6dc..11cd117b1e 100644 --- a/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyContext.java +++ b/netconf/netconf-topology-singleton/src/main/java/org/opendaylight/netconf/topology/singleton/impl/NetconfTopologyContext.java @@ -47,9 +47,9 @@ class NetconfTopologyContext implements ClusterSingletonService { private RemoteDeviceConnector remoteDeviceConnector; private NetconfNodeManager netconfNodeManager; private ActorRef masterActorRef; - private boolean finalClose = false; + private final AtomicBoolean finalClose = new AtomicBoolean(false); private final AtomicBoolean closed = new AtomicBoolean(false); - private boolean isMaster; + private volatile boolean isMaster; NetconfTopologyContext(final NetconfTopologySetup netconfTopologyDeviceSetup, final ServiceGroupIdentifier serviceGroupIdent, @@ -80,7 +80,7 @@ class NetconfTopologyContext implements ClusterSingletonService { netconfNodeManager = null; } - if (!finalClose) { + if (!finalClose.get()) { final String masterAddress = Cluster.get(netconfTopologyDeviceSetup.getActorSystem()).selfAddress().toString(); masterActorRef = netconfTopologyDeviceSetup.getActorSystem().actorOf(NetconfNodeActor.props( @@ -97,7 +97,7 @@ class NetconfTopologyContext implements ClusterSingletonService { @Override public ListenableFuture closeServiceInstance() { - if (!finalClose) { + if (!finalClose.get()) { // in case that master changes role to slave, new NodeDeviceManager must be created and listener registered netconfNodeManager = createNodeDeviceManager(); } @@ -121,7 +121,9 @@ class NetconfTopologyContext implements ClusterSingletonService { } void closeFinal() throws Exception { - finalClose = true; + if (!finalClose.compareAndSet(false, true)) { + return; + } if (netconfNodeManager != null) { netconfNodeManager.close();