From 58bde1e29d0d2a91d2b22033abddeb2db835cc8f Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Mon, 10 Jan 2022 11:23:02 +0100 Subject: [PATCH] Add Activation::stop_root --- syndicate-server/src/lifecycle.rs | 2 +- syndicate/src/actor.rs | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) 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| {