use std::sync::atomic::Ordering;
pub fn register_shutdown_handler() {
if let Err(e) = ctrlc::set_handler(move || {
let prev = crate::SIGNAL_COUNT.fetch_add(1, Ordering::AcqRel);
if prev == 0 {
crate::SHUTDOWN.store(true, Ordering::Release);
crate::SIGNAL_NUMBER.store(2, Ordering::Release);
crate::cancel_token().cancel();
tracing::warn!(
target: "signals",
"shutdown signal received; finishing current operation gracefully"
);
} else {
eprintln!("\nForced shutdown (second signal received). Exiting immediately.");
std::process::exit(130);
}
}) {
tracing::warn!(target: "signals", error = %e, "signal handler registration failed");
}
}