mirror of
https://github.com/marcoallegretti/WEFT_OS.git
synced 2026-03-26 17:03:09 +00:00
fix(appd): handle SIGTERM for clean shutdown under systemd
run() now registers a SIGTERM handler (unix-only, cfg-gated) alongside the existing SIGINT handler. Both break the accept loop and allow the Unix socket to be removed before exit. On non-Unix targets the SIGTERM arm uses std::future::pending so the select! shape is unchanged at the type level.
This commit is contained in:
parent
01a4969883
commit
a409b954ab
1 changed files with 16 additions and 3 deletions
|
|
@ -132,9 +132,18 @@ async fn run() -> anyhow::Result<()> {
|
|||
|
||||
let _ = sd_notify::notify(false, &[sd_notify::NotifyState::Ready]);
|
||||
|
||||
let mut shutdown = std::pin::pin!(tokio::signal::ctrl_c());
|
||||
#[cfg(unix)]
|
||||
let mut sigterm = {
|
||||
use tokio::signal::unix::{SignalKind, signal};
|
||||
signal(SignalKind::terminate()).context("SIGTERM handler")?
|
||||
};
|
||||
|
||||
loop {
|
||||
#[cfg(unix)]
|
||||
let term = sigterm.recv();
|
||||
#[cfg(not(unix))]
|
||||
let term = std::future::pending::<Option<()>>();
|
||||
|
||||
tokio::select! {
|
||||
result = listener.accept() => {
|
||||
let (stream, _) = result.context("accept")?;
|
||||
|
|
@ -155,8 +164,12 @@ async fn run() -> anyhow::Result<()> {
|
|||
}
|
||||
});
|
||||
}
|
||||
_ = &mut shutdown => {
|
||||
tracing::info!("shutting down");
|
||||
_ = tokio::signal::ctrl_c() => {
|
||||
tracing::info!("SIGINT received; shutting down");
|
||||
break;
|
||||
}
|
||||
_ = term => {
|
||||
tracing::info!("SIGTERM received; shutting down");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue