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;