Description
In the ShuffleRunner threads, there's a loop which does not terminate if the task threads get killed.
while ((runningFetchers.size() >= numFetchers || pendingHosts.isEmpty()) && numCompletedInputs.get() < numInputs) { inputContext.notifyProgress(); boolean ret = wakeLoop.await(1000, TimeUnit.MILLISECONDS); }
The wakeLoop signal does not exit this out of the loop and is missing a break for shut-down.