From 6e4e6b85e919aab853a0877d317592e0d60b7145 Mon Sep 17 00:00:00 2001 From: Nils Andreas Svee Date: Tue, 14 Apr 2026 02:03:06 +0700 Subject: [PATCH] feat(shutdown): Implement global shutdown signal handling --- src/main.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 5cab64e..3fe3c8f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -19,14 +19,20 @@ use ::log::{debug, info}; use std::collections::HashMap; use std::net::IpAddr; use std::str::FromStr; -use std::sync::atomic::AtomicU64; -use std::sync::mpsc::{channel, sync_channel}; +use std::sync::atomic::{AtomicBool, AtomicU64, Ordering}; +use std::sync::mpsc::{channel, sync_channel, RecvTimeoutError}; use std::sync::{Arc, Mutex, RwLock}; use std::thread::sleep; use std::time::Duration; use std::time::Instant; use std::{process, thread}; +pub static SHUTDOWN: AtomicBool = AtomicBool::new(false); + +extern "C" fn signal_handler(_: libc::c_int) { + SHUTDOWN.store(true, Ordering::Relaxed); +} + use crate::config::{Config, MeasurementType}; use crate::netlink::Netlink; use crate::pinger::{PingListener, PingSender}; @@ -40,6 +46,11 @@ const VERSION: &str = env!("CARGO_PKG_VERSION"); fn main() -> anyhow::Result<()> { println!("Starting sqm-autorate version {}", VERSION); + unsafe { + libc::signal(libc::SIGINT, signal_handler as *const () as libc::sighandler_t); + libc::signal(libc::SIGTERM, signal_handler as *const () as libc::sighandler_t); + } + let config = Config::new()?; log::init(config.log_level)?; if config.dry_run {