diff --git a/src/tools.rs b/src/tools.rs index 5dabb416..52640f73 100644 --- a/src/tools.rs +++ b/src/tools.rs @@ -545,3 +545,15 @@ pub fn fd_change_cloexec(fd: RawFd, on: bool) -> Result<(), Error> { fcntl(fd, F_SETFD(flags))?; Ok(()) } + + +static mut SHUTDOWN_REQUESTED: bool = false; + +pub fn request_shutdown() { + unsafe { SHUTDOWN_REQUESTED = true; } +} + +#[inline(always)] +pub fn shutdown_requested() -> bool { + unsafe { SHUTDOWN_REQUESTED } +} diff --git a/src/tools/daemon.rs b/src/tools/daemon.rs index db66c316..eb1ead05 100644 --- a/src/tools/daemon.rs +++ b/src/tools/daemon.rs @@ -200,7 +200,10 @@ where }); Ok(service.select(signal_handler) - .map(|_| log::info!("daemon shutting down...")) - .map_err(|_| ()) + .map(|_| { + log::info!("daemon shutting down..."); + crate::tools::request_shutdown(); + }) + .map_err(|_| ()) ) }