src/server/state.rs: switch to async
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
This commit is contained in:
parent
91e4587343
commit
aa4110cc64
@ -3,9 +3,9 @@ use lazy_static::lazy_static;
|
|||||||
use std::sync::Mutex;
|
use std::sync::Mutex;
|
||||||
|
|
||||||
use futures::*;
|
use futures::*;
|
||||||
use futures::stream::Stream;
|
|
||||||
|
|
||||||
use tokio_signal::unix::{Signal, SIGHUP, SIGINT};
|
// FIXME: with the next bump `Signal::new` becomes a freestanding function `signal()`
|
||||||
|
use tokio_net::signal::unix::{Signal, SignalKind};
|
||||||
|
|
||||||
use crate::tools::{self, BroadcastData};
|
use crate::tools::{self, BroadcastData};
|
||||||
|
|
||||||
@ -36,33 +36,33 @@ lazy_static! {
|
|||||||
|
|
||||||
pub fn server_state_init() -> Result<(), Error> {
|
pub fn server_state_init() -> Result<(), Error> {
|
||||||
|
|
||||||
let stream = Signal::new(SIGINT).flatten_stream();
|
let stream = Signal::new(SignalKind::interrupt())?;
|
||||||
|
|
||||||
let future = stream.for_each(|_| {
|
let future = stream.for_each(|_| {
|
||||||
println!("got shutdown request (SIGINT)");
|
println!("got shutdown request (SIGINT)");
|
||||||
SERVER_STATE.lock().unwrap().reload_request = false;
|
SERVER_STATE.lock().unwrap().reload_request = false;
|
||||||
tools::request_shutdown();
|
tools::request_shutdown();
|
||||||
Ok(())
|
futures::future::ready(())
|
||||||
}).map_err(|_| {});
|
});
|
||||||
|
|
||||||
let abort_future = last_worker_future().map_err(|_| {});
|
let abort_future = last_worker_future().map_err(|_| {});
|
||||||
let task = future.select(abort_future);
|
let task = futures::future::select(future, abort_future);
|
||||||
|
|
||||||
tokio::spawn(task.map(|_| {}).map_err(|_| {}));
|
tokio::spawn(task.map(|_| ()));
|
||||||
|
|
||||||
let stream = Signal::new(SIGHUP).flatten_stream();
|
let stream = Signal::new(SignalKind::hangup())?;
|
||||||
|
|
||||||
let future = stream.for_each(|_| {
|
let future = stream.for_each(|_| {
|
||||||
println!("got reload request (SIGHUP)");
|
println!("got reload request (SIGHUP)");
|
||||||
SERVER_STATE.lock().unwrap().reload_request = true;
|
SERVER_STATE.lock().unwrap().reload_request = true;
|
||||||
tools::request_shutdown();
|
tools::request_shutdown();
|
||||||
Ok(())
|
futures::future::ready(())
|
||||||
}).map_err(|_| {});
|
});
|
||||||
|
|
||||||
let abort_future = last_worker_future().map_err(|_| {});
|
let abort_future = last_worker_future().map_err(|_| {});
|
||||||
let task = future.select(abort_future);
|
let task = futures::future::select(future, abort_future);
|
||||||
|
|
||||||
tokio::spawn(task.map(|_| {}).map_err(|_| {}));
|
tokio::spawn(task.map(|_| ()));
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -91,13 +91,15 @@ pub fn server_shutdown() {
|
|||||||
check_last_worker();
|
check_last_worker();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn shutdown_future() -> impl Future<Item=(), Error=Error> {
|
pub fn shutdown_future() -> impl Future<Output = ()> {
|
||||||
let mut data = SERVER_STATE.lock().unwrap();
|
let mut data = SERVER_STATE.lock().unwrap();
|
||||||
data.shutdown_listeners.listen()
|
data
|
||||||
|
.shutdown_listeners
|
||||||
|
.listen()
|
||||||
|
.map(|_| ())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn last_worker_future() -> impl Future<Item=(), Error=Error> {
|
pub fn last_worker_future() -> impl Future<Output = Result<(), Error>> {
|
||||||
|
|
||||||
let mut data = SERVER_STATE.lock().unwrap();
|
let mut data = SERVER_STATE.lock().unwrap();
|
||||||
data.last_worker_listeners.listen()
|
data.last_worker_listeners.listen()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user