abstract async shutdown waiting loop
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
parent
0a9b6c136f
commit
9eb99f8070
2 changed files with 13 additions and 8 deletions
|
@ -1,5 +1,8 @@
|
||||||
use std::{
|
use std::{
|
||||||
sync::atomic::{AtomicBool, Ordering},
|
sync::{
|
||||||
|
atomic::{AtomicBool, Ordering},
|
||||||
|
Arc,
|
||||||
|
},
|
||||||
time::SystemTime,
|
time::SystemTime,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -102,6 +105,13 @@ impl Server {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
pub async fn until_shutdown(self: Arc<Self>) {
|
||||||
|
while self.running() {
|
||||||
|
self.signal.subscribe().recv().await.ok();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn runtime(&self) -> &runtime::Handle {
|
pub fn runtime(&self) -> &runtime::Handle {
|
||||||
self.runtime
|
self.runtime
|
||||||
|
|
|
@ -97,13 +97,8 @@ pub async fn watch(&self, user_id: &UserId, device_id: &DeviceId) -> Result {
|
||||||
);
|
);
|
||||||
|
|
||||||
// Server shutdown
|
// Server shutdown
|
||||||
let server_shutdown = async move {
|
let server_shutdown = self.services.server.clone().until_shutdown().boxed();
|
||||||
while self.services.server.running() {
|
futures.push(server_shutdown);
|
||||||
self.services.server.signal.subscribe().recv().await.ok();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
futures.push(server_shutdown.boxed());
|
|
||||||
if !self.services.server.running() {
|
if !self.services.server.running() {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue