From 9eb99f8070db4711845592287fd0a793fdd7cd7f Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Sun, 29 Dec 2024 02:21:22 +0000 Subject: [PATCH] abstract async shutdown waiting loop Signed-off-by: Jason Volk --- src/core/server.rs | 12 +++++++++++- src/service/sync/watch.rs | 9 ++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/core/server.rs b/src/core/server.rs index 2a70ae4b..8a4d9f66 100644 --- a/src/core/server.rs +++ b/src/core/server.rs @@ -1,5 +1,8 @@ use std::{ - sync::atomic::{AtomicBool, Ordering}, + sync::{ + atomic::{AtomicBool, Ordering}, + Arc, + }, time::SystemTime, }; @@ -102,6 +105,13 @@ impl Server { Ok(()) } + #[inline] + pub async fn until_shutdown(self: Arc) { + while self.running() { + self.signal.subscribe().recv().await.ok(); + } + } + #[inline] pub fn runtime(&self) -> &runtime::Handle { self.runtime diff --git a/src/service/sync/watch.rs b/src/service/sync/watch.rs index 50959ded..2b351c3a 100644 --- a/src/service/sync/watch.rs +++ b/src/service/sync/watch.rs @@ -97,13 +97,8 @@ pub async fn watch(&self, user_id: &UserId, device_id: &DeviceId) -> Result { ); // Server shutdown - let server_shutdown = async move { - while self.services.server.running() { - self.services.server.signal.subscribe().recv().await.ok(); - } - }; - - futures.push(server_shutdown.boxed()); + let server_shutdown = self.services.server.clone().until_shutdown().boxed(); + futures.push(server_shutdown); if !self.services.server.running() { return Ok(()); }