From f39e0d82add81fc67ccf33bca0d59d93b3a5ca73 Mon Sep 17 00:00:00 2001 From: 2ndDerivative Date: Wed, 13 Aug 2025 13:35:12 +0200 Subject: [PATCH 1/2] add windows signal handlers --- src/bin/server.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/bin/server.rs b/src/bin/server.rs index 34c0bf11023..311d4c5da65 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -13,7 +13,10 @@ use reqwest::Client; use std::io::Write; use std::net::SocketAddr; use tokio::net::TcpListener; +#[cfg(unix)] use tokio::signal::unix::{SignalKind, signal}; +#[cfg(windows)] +use tokio::signal::windows::{ctrl_break, ctrl_c, ctrl_close, ctrl_logoff, ctrl_shutdown}; use tower::Layer; const CORE_THREADS: usize = 4; @@ -90,6 +93,7 @@ fn main() -> anyhow::Result<()> { Ok(()) } +#[cfg(unix)] async fn shutdown_signal() { let interrupt = async { signal(SignalKind::interrupt()) @@ -111,6 +115,37 @@ async fn shutdown_signal() { } } +#[cfg(windows)] +async fn shutdown_signal() { + let ctrl_break = async { + ctrl_break().expect("failed to install signal handler").recv().await; + }; + + let ctrl_c = async { + ctrl_c().expect("failed to install signal handler").recv().await; + }; + + let ctrl_close = async { + ctrl_close().expect("failed to install signal handler").recv().await; + }; + + let ctrl_logoff = async { + ctrl_logoff().expect("failed to install signal handler").recv().await; + }; + + let ctrl_shutdown = async { + ctrl_shutdown().expect("failed to install signal handler").recv().await; + }; + + tokio::select! { + _ = ctrl_break => {}, + _ = ctrl_c => {}, + _ = ctrl_close => {}, + _ = ctrl_logoff => {}, + _ = ctrl_shutdown => {}, + } +} + fn log_instance_metrics_thread(app: Arc) { // Only run the thread if the configuration is provided let interval = match app.config.instance_metrics_log_every_seconds { From 9860589a893452df479780f88198e3c002f60380 Mon Sep 17 00:00:00 2001 From: 2ndDerivative Date: Wed, 13 Aug 2025 13:39:53 +0200 Subject: [PATCH 2/2] fix formatting --- src/bin/server.rs | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/bin/server.rs b/src/bin/server.rs index 311d4c5da65..610fa1eae55 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -118,23 +118,38 @@ async fn shutdown_signal() { #[cfg(windows)] async fn shutdown_signal() { let ctrl_break = async { - ctrl_break().expect("failed to install signal handler").recv().await; + ctrl_break() + .expect("failed to install signal handler") + .recv() + .await; }; let ctrl_c = async { - ctrl_c().expect("failed to install signal handler").recv().await; + ctrl_c() + .expect("failed to install signal handler") + .recv() + .await; }; let ctrl_close = async { - ctrl_close().expect("failed to install signal handler").recv().await; + ctrl_close() + .expect("failed to install signal handler") + .recv() + .await; }; let ctrl_logoff = async { - ctrl_logoff().expect("failed to install signal handler").recv().await; + ctrl_logoff() + .expect("failed to install signal handler") + .recv() + .await; }; let ctrl_shutdown = async { - ctrl_shutdown().expect("failed to install signal handler").recv().await; + ctrl_shutdown() + .expect("failed to install signal handler") + .recv() + .await; }; tokio::select! {