diff --git a/syndicate-server/src/lifecycle.rs b/syndicate-server/src/lifecycle.rs index 25cb5e2..7411915 100644 --- a/syndicate-server/src/lifecycle.rs +++ b/syndicate-server/src/lifecycle.rs @@ -56,7 +56,7 @@ pub fn terminate_on_service_restart<'a, N: Unparse<&'a Language, AnyVa ) { on_service_restart(t, ds, service_name, |t| { tracing::info!("Terminating to restart"); - t.state.shutdown(); + t.stop_root(); Ok(()) }); } diff --git a/syndicate/src/actor.rs b/syndicate/src/actor.rs index 53061b0..b8e1b23 100644 --- a/syndicate/src/actor.rs +++ b/syndicate/src/actor.rs @@ -1118,6 +1118,14 @@ impl<'activation> Activation<'activation> { self.stop_facet(self.facet.facet_id) } + /// Arranges for the active actor's root facet to be stopped cleanly when `self` commits; + /// this is one way to arrange a clean shutdown of the entire actor. + /// + /// Equivalent to `self.stop_facet(self.state.root)`. + pub fn stop_root(&mut self) { + self.stop_facet(self.state.root); + } + fn stop_if_inert(&mut self) { let facet_id = self.facet.facet_id; self.enqueue_for_myself_at_commit(Box::new(move |t| {