From 6f727ecd29ad82cccb556e1c63442c7e165a45dc Mon Sep 17 00:00:00 2001 From: Patrik Nordwall Date: Thu, 27 Sep 2012 17:07:59 +0200 Subject: [PATCH] Incorporate review feedback, see #2552 --- .../src/main/scala/akka/actor/ActorRefProvider.scala | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala b/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala index d0cfb91a04..e50f1378c1 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala @@ -396,8 +396,14 @@ class LocalActorRefProvider( var terminationHooks = Set.empty[ActorRef] def receive = { - case Terminated(a) if terminationHooks.contains(a) ⇒ terminationHooks -= a + case Terminated(a) if terminationHooks.contains(a) ⇒ + // a registered, and watched termination hook terminated before + // termination process of guardian has started + terminationHooks -= a case Terminated(_) ⇒ + // time for the guardian to stop, but first notify all the + // termination hooks, they will reply with TerminationHookDone + // and when all are done the guardian is stopped context.become(terminating) terminationHooks foreach { _ ! TerminationHook } stopWhenAllTerminationHooksDone() @@ -415,7 +421,7 @@ class LocalActorRefProvider( } def stopWhenAllTerminationHooksDone(remove: ActorRef): Unit = { - terminationHooks -= sender + terminationHooks -= remove stopWhenAllTerminationHooksDone() }