do newActor() and preRestart() in the right order, see #1854
This commit is contained in:
parent
ae4a1960ad
commit
7ce4765fec
2 changed files with 18 additions and 1 deletions
|
|
@ -60,5 +60,22 @@ class SupervisorMiscSpec extends AkkaSpec(SupervisorMiscSpec.config) with Defaul
|
|||
assert(Await.result(actor4 ? "status", timeout.duration) == "OK", "actor4 is shutdown")
|
||||
}
|
||||
}
|
||||
|
||||
"be able to create named children in its constructor" in {
|
||||
val a = system.actorOf(Props(new Actor {
|
||||
context.actorOf(Props.empty, "bob")
|
||||
def receive = {
|
||||
case x: Exception ⇒ throw x
|
||||
}
|
||||
override def preStart(): Unit = testActor ! "preStart"
|
||||
}))
|
||||
val m = "weird message"
|
||||
EventFilter[Exception](m, occurrences = 1) intercept {
|
||||
a ! new Exception(m)
|
||||
}
|
||||
expectMsg("preStart")
|
||||
expectMsg("preStart")
|
||||
a.isTerminated must be(false)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -389,7 +389,6 @@ private[akka] class ActorCell(
|
|||
def recreate(cause: Throwable): Unit = try {
|
||||
val failedActor = actor
|
||||
if (system.settings.DebugLifecycle) system.eventStream.publish(Debug(self.path.toString, clazz(failedActor), "restarting"))
|
||||
val freshActor = newActor()
|
||||
if (failedActor ne null) {
|
||||
val c = currentMessage //One read only plz
|
||||
try {
|
||||
|
|
@ -398,6 +397,7 @@ 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
|
||||
freshActor.postRestart(cause)
|
||||
if (system.settings.DebugLifecycle) system.eventStream.publish(Debug(self.path.toString, clazz(freshActor), "restarted"))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue