diff --git a/src/java/azkaban/execapp/event/LocalFlowWatcher.java b/src/java/azkaban/execapp/event/LocalFlowWatcher.java
index b51f17b..4cfd2bb 100644
--- a/src/java/azkaban/execapp/event/LocalFlowWatcher.java
+++ b/src/java/azkaban/execapp/event/LocalFlowWatcher.java
@@ -1,5 +1,7 @@
package azkaban.execapp.event;
+import com.sun.org.apache.regexp.internal.recompile;
+
import azkaban.execapp.FlowRunner;
import azkaban.execapp.JobRunner;
import azkaban.executor.ExecutableNode;
@@ -7,6 +9,7 @@ import azkaban.executor.ExecutableNode;
public class LocalFlowWatcher extends FlowWatcher {
private LocalFlowWatcherListener watcherListener;
private FlowRunner runner;
+ private boolean isShutdown = false;
public LocalFlowWatcher(FlowRunner runner) {
super(runner.getExecutableFlow().getExecutionId());
@@ -20,6 +23,11 @@ public class LocalFlowWatcher extends FlowWatcher {
@Override
public void stopWatcher() {
// Just freeing stuff
+ if(isShutdown) {
+ return;
+ }
+
+ isShutdown = true;
runner.removeListener(watcherListener);
runner = null;
diff --git a/src/java/azkaban/execapp/event/RemoteFlowWatcher.java b/src/java/azkaban/execapp/event/RemoteFlowWatcher.java
index 398a364..ec60025 100644
--- a/src/java/azkaban/execapp/event/RemoteFlowWatcher.java
+++ b/src/java/azkaban/execapp/event/RemoteFlowWatcher.java
@@ -95,6 +95,9 @@ public class RemoteFlowWatcher extends FlowWatcher {
@Override
public synchronized void stopWatcher() {
+ if(isShutdown) {
+ return;
+ }
isShutdown = true;
if (thread != null) {
thread.interrupt();