Yuta HIGUCHI

LinkDiscovery: only reschedule if not requested to stop

Change-Id: If2ac04fbc81afec95137fbdbe22afa0c7f826e4a
...@@ -82,7 +82,7 @@ public class LinkDiscovery implements TimerTask { ...@@ -82,7 +82,7 @@ public class LinkDiscovery implements TimerTask {
82 private final PacketService pktService; 82 private final PacketService pktService;
83 private final MastershipService mastershipService; 83 private final MastershipService mastershipService;
84 private Timeout timeout; 84 private Timeout timeout;
85 - private boolean isStopped; 85 + private volatile boolean isStopped;
86 86
87 /** 87 /**
88 * Instantiates discovery manager for the given physical switch. Creates a 88 * Instantiates discovery manager for the given physical switch. Creates a
...@@ -243,8 +243,10 @@ public class LinkDiscovery implements TimerTask { ...@@ -243,8 +243,10 @@ public class LinkDiscovery implements TimerTask {
243 public void run(final Timeout t) { 243 public void run(final Timeout t) {
244 boolean isMaster = mastershipService.getLocalRole(device.id()) == MASTER; 244 boolean isMaster = mastershipService.getLocalRole(device.id()) == MASTER;
245 if (!isMaster) { 245 if (!isMaster) {
246 - // reschedule timer 246 + if (!isStopped()) {
247 - timeout = Timer.getTimer().newTimeout(this, this.probeRate, MILLISECONDS); 247 + // reschedule timer
248 + timeout = Timer.getTimer().newTimeout(this, this.probeRate, MILLISECONDS);
249 + }
248 return; 250 return;
249 } 251 }
250 252
...@@ -280,16 +282,18 @@ public class LinkDiscovery implements TimerTask { ...@@ -280,16 +282,18 @@ public class LinkDiscovery implements TimerTask {
280 } 282 }
281 } 283 }
282 284
283 - // reschedule timer 285 + if (!isStopped()) {
284 - timeout = Timer.getTimer().newTimeout(this, this.probeRate, MILLISECONDS); 286 + // reschedule timer
287 + timeout = Timer.getTimer().newTimeout(this, this.probeRate, MILLISECONDS);
288 + }
285 } 289 }
286 290
287 - public void stop() { 291 + public synchronized void stop() {
288 timeout.cancel(); 292 timeout.cancel();
289 isStopped = true; 293 isStopped = true;
290 } 294 }
291 295
292 - public void start() { 296 + public synchronized void start() {
293 if (isStopped) { 297 if (isStopped) {
294 timeout = Timer.getTimer().newTimeout(this, 0, MILLISECONDS); 298 timeout = Timer.getTimer().newTimeout(this, 0, MILLISECONDS);
295 isStopped = false; 299 isStopped = false;
......