From d84266e35702ccf719c981442831948cd8455be2 Mon Sep 17 00:00:00 2001 From: Christopher Batey Date: Tue, 4 Feb 2020 09:53:01 +0000 Subject: [PATCH] Execute post stop for guardian behaviors Fixes #28557 --- .../actor/typed/scaladsl/OnSignalSpec.scala | 31 +++++++++++++++++++ .../adapter/GuardianStartupBehavior.scala | 3 +- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/akka-actor-typed-tests/src/test/scala/akka/actor/typed/scaladsl/OnSignalSpec.scala b/akka-actor-typed-tests/src/test/scala/akka/actor/typed/scaladsl/OnSignalSpec.scala index f1a32c50d1..6814af6286 100644 --- a/akka-actor-typed-tests/src/test/scala/akka/actor/typed/scaladsl/OnSignalSpec.scala +++ b/akka-actor-typed-tests/src/test/scala/akka/actor/typed/scaladsl/OnSignalSpec.scala @@ -29,5 +29,36 @@ final class OnSignalSpec extends ScalaTestWithActorTestKit with AnyWordSpecLike spawn[Nothing](behavior) probe.expectMessage(Done) } + + def stopper(probe: TestProbe[Done]) = Behaviors + .receiveMessage[String] { + case "stop" => + println("Stopping") + Behaviors.stopped + } + .receiveSignal { + case (_, PostStop) => + println("Post stop called") + probe.ref ! Done + Behaviors.same + } + "execute post stop" in { + val probe = createTestProbe[Done]("post-stop-child") + val stopperRef = spawn(stopper(probe)) + stopperRef ! "stop" + probe.expectMessage(Done) + + } + + "post stop for guardian behavior" in { + val probe = createTestProbe[Done]("post-stop-probe") + val system = ActorSystem(stopper(probe), "work") + try { + system ! "stop" + probe.expectMessage(Done) + } finally { + system.terminate() + } + } } } diff --git a/akka-actor-typed/src/main/scala/akka/actor/typed/internal/adapter/GuardianStartupBehavior.scala b/akka-actor-typed/src/main/scala/akka/actor/typed/internal/adapter/GuardianStartupBehavior.scala index c67f1d3c79..a77c10c47f 100644 --- a/akka-actor-typed/src/main/scala/akka/actor/typed/internal/adapter/GuardianStartupBehavior.scala +++ b/akka-actor-typed/src/main/scala/akka/actor/typed/internal/adapter/GuardianStartupBehavior.scala @@ -73,7 +73,8 @@ private[akka] object GuardianStartupBehavior { next else { ctx.asScala.system.terminate() - Behaviors.ignore + // return next so that the adapter can call post stop on the previous behavior + next } } }