diff --git a/Cargo.lock b/Cargo.lock index 5f11cfd..0839f61 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1197,7 +1197,7 @@ dependencies = [ [[package]] name = "spawned-concurrency" -version = "0.2.0" +version = "0.2.1" dependencies = [ "futures", "spawned-rt", @@ -1209,7 +1209,7 @@ dependencies = [ [[package]] name = "spawned-rt" -version = "0.2.0" +version = "0.2.1" dependencies = [ "crossbeam", "tokio", diff --git a/Cargo.toml b/Cargo.toml index 0a23f9a..eb9ac80 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,6 +22,6 @@ tracing = { version = "0.1.41", features = ["log"] } tracing-subscriber = { version = "0.3.19", features = ["env-filter"] } [workspace.package] -version = "0.2.0" +version = "0.2.1" license = "MIT" edition = "2021" diff --git a/concurrency/src/tasks/gen_server.rs b/concurrency/src/tasks/gen_server.rs index 118b1d3..88eb743 100644 --- a/concurrency/src/tasks/gen_server.rs +++ b/concurrency/src/tasks/gen_server.rs @@ -146,7 +146,6 @@ pub trait GenServer: Send + Sized + Clone { ) -> impl Future> + Send { async { let init_result = self - .clone() .init(handle) .await .inspect_err(|err| tracing::error!("Initialization failed: {err:?}")); @@ -157,10 +156,12 @@ pub trait GenServer: Send + Sized + Clone { }; handle.cancellation_token().cancel(); - if let Err(err) = self.teardown(handle).await { - tracing::error!("Error during teardown: {err:?}"); + if let Ok(final_state) = res { + if let Err(err) = final_state.teardown(handle).await { + tracing::error!("Error during teardown: {err:?}"); + } } - res + Ok(()) } } @@ -178,7 +179,7 @@ pub trait GenServer: Send + Sized + Clone { mut self, handle: &GenServerHandle, rx: &mut mpsc::Receiver>, - ) -> impl Future> + Send { + ) -> impl Future> + Send { async { loop { let (new_state, cont) = self.receive(handle, rx).await?; @@ -188,7 +189,7 @@ pub trait GenServer: Send + Sized + Clone { } } tracing::trace!("Stopping GenServer"); - Ok(()) + Ok(self) } }