diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/event/DrainDispatcher.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/event/DrainDispatcher.java index 803b2bb..74e1532 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/event/DrainDispatcher.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/event/DrainDispatcher.java @@ -27,6 +27,7 @@ // http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#96595 // and similar grotesqueries private volatile boolean drained = false; + private volatile boolean stopped = false; private final BlockingQueue queue; final Object mutex; @@ -40,6 +41,12 @@ private DrainDispatcher(BlockingQueue eventQueue) { this.mutex = this; } + @Override + protected void serviceStop() throws Exception { + stopped = true; + super.serviceStop(); + } + /** * Busy loop waiting for all queued events to drain. */ @@ -54,7 +61,7 @@ Runnable createThread() { return new Runnable() { @Override public void run() { - while (!Thread.currentThread().isInterrupted()) { + while (!stopped && !Thread.currentThread().isInterrupted()) { synchronized (mutex) { // !drained if dispatch queued new events on this dispatcher drained = queue.isEmpty(); -- 1.9.2.msysgit.0