…oad the config
- replace TreeMap with custom ChildrenContainer, which has three implementations: empty, normal and “terminating” (i.e. waiting for some child to terminate) - split recreate() in the same way as terminate(), so that there is a phase during which the suspended actor waits for termination of all children which were stopped in preRestart - do not null out “actor” in ActorCell during restart, because we do need the supervisionStrategy and nulling it out does not buy us much in this case anyway - provide new ActorContext.suspendForChildTermination(), which enters limbo for as long there are outstanding termination requests; this enables code which is very similar to previously (half-working) setups with “synchronous” context.stop(child) docs are still missing, plus a little polishing here and there; oh, and before I forget: ActorCell NOW is 64 bytes again ;-)
This is commit 9733578ebbce6fc00b9e611540c3f24b76289911 and commit 30bdac884b4ef256242db7e4fcee44df9f9921de from typesafehub/config. Default and reference configs are no longer cached, and use the thread's context class loader instead of ConfigImpl.class.getClassLoader().
- ActorCell.stop(actor) removed the actor from childrenRefs before handleChildTerminated, leading to removing from Locker immediately after adding it in - intercept ChildTerminated message in RemoteTransport.receive if destination is not found (i.e. isTerminate==true) and re-route to Locker, which was changed to support path-based lookup to find the parent and funnel the ChildTerminated to its intended destination - add Locker.shutdown() to detach remaining actors from their dispatchers upon system termination.