LinkDiscovery: only reschedule if not requested to stop
Change-Id: If2ac04fbc81afec95137fbdbe22afa0c7f826e4a
diff --git a/providers/lldp/src/main/java/org/onlab/onos/provider/lldp/impl/LinkDiscovery.java b/providers/lldp/src/main/java/org/onlab/onos/provider/lldp/impl/LinkDiscovery.java
index e0eea96..db52454 100644
--- a/providers/lldp/src/main/java/org/onlab/onos/provider/lldp/impl/LinkDiscovery.java
+++ b/providers/lldp/src/main/java/org/onlab/onos/provider/lldp/impl/LinkDiscovery.java
@@ -82,7 +82,7 @@
private final PacketService pktService;
private final MastershipService mastershipService;
private Timeout timeout;
- private boolean isStopped;
+ private volatile boolean isStopped;
/**
* Instantiates discovery manager for the given physical switch. Creates a
@@ -243,8 +243,10 @@
public void run(final Timeout t) {
boolean isMaster = mastershipService.getLocalRole(device.id()) == MASTER;
if (!isMaster) {
- // reschedule timer
- timeout = Timer.getTimer().newTimeout(this, this.probeRate, MILLISECONDS);
+ if (!isStopped()) {
+ // reschedule timer
+ timeout = Timer.getTimer().newTimeout(this, this.probeRate, MILLISECONDS);
+ }
return;
}
@@ -280,16 +282,18 @@
}
}
- // reschedule timer
- timeout = Timer.getTimer().newTimeout(this, this.probeRate, MILLISECONDS);
+ if (!isStopped()) {
+ // reschedule timer
+ timeout = Timer.getTimer().newTimeout(this, this.probeRate, MILLISECONDS);
+ }
}
- public void stop() {
+ public synchronized void stop() {
timeout.cancel();
isStopped = true;
}
- public void start() {
+ public synchronized void start() {
if (isStopped) {
timeout = Timer.getTimer().newTimeout(this, 0, MILLISECONDS);
isStopped = false;