Merge pull request #21494 from akka/wip-taskrun-shutdown-patriknw

improve shutdown of TaskRunner, #21430
This commit is contained in:
Patrik Nordwall 2016-09-19 15:45:33 +02:00 committed by GitHub
commit 3bc2cb2294

View file

@ -63,6 +63,14 @@ private[akka] object TaskRunner {
tryRemove(0)
}
def removeAll(): Unit = {
var i = 0
while (i < elements.length) {
elements(i) = null.asInstanceOf[T]
i += 1
}
}
/**
* All elements as an array for efficient iteration.
* The elements can be `null`.
@ -138,12 +146,14 @@ private[akka] class TaskRunner(system: ExtendedActorSystem, val idleCpuLevel: In
running = true
while (running) {
processCommand(cmdQueue.poll())
executeTasks()
if (reset) {
reset = false
idleStrategy.reset()
if (running) {
executeTasks()
if (reset) {
reset = false
idleStrategy.reset()
}
idleStrategy.idle()
}
idleStrategy.idle()
}
} catch {
case NonFatal(e)
@ -178,6 +188,8 @@ private[akka] class TaskRunner(system: ExtendedActorSystem, val idleCpuLevel: In
case Remove(task) tasks.remove(task)
case Shutdown
running = false
tasks.removeAll() // gc friendly
while (cmdQueue.poll() != null) () // gc friendly
shutdown.trySuccess(Done)
}
}