diff --git a/akka-actor/src/main/scala/akka/actor/ActorCell.scala b/akka-actor/src/main/scala/akka/actor/ActorCell.scala index b46d95b669..e659928743 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorCell.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorCell.scala @@ -397,8 +397,8 @@ private[akka] class ActorCell( clearActorFields() } } - val freshActor = newActor() - actor = freshActor // assign it here so if preStart fails, we can null out the sef-refs next call + val freshActor = newActor() // this must happen after failedActor.preRestart (to scrap those children) + actor = freshActor // this must happen before postRestart has a chance to fail freshActor.postRestart(cause) if (system.settings.DebugLifecycle) system.eventStream.publish(Debug(self.path.toString, clazz(freshActor), "restarted"))