feat(shutdown): Implement global shutdown signal handling

This commit is contained in:
Nils Andreas Svee committed 2026-04-14 02:03:53 +07:00
1 parent f8976a78a2
commit 6e4e6b85e9
1 file changed
+13 -2
+13 -2
View File
@@ -19,14 +19,20 @@ use ::log::{debug, info};
use std::collections::HashMap; use std::collections::HashMap;
use std::net::IpAddr; use std::net::IpAddr;
use std::str::FromStr; use std::str::FromStr;
use std::sync::atomic::AtomicU64; use std::sync::atomic::{AtomicBool, AtomicU64, Ordering};
use std::sync::mpsc::{channel, sync_channel}; use std::sync::mpsc::{channel, sync_channel, RecvTimeoutError};
use std::sync::{Arc, Mutex, RwLock}; use std::sync::{Arc, Mutex, RwLock};
use std::thread::sleep; use std::thread::sleep;
use std::time::Duration; use std::time::Duration;
use std::time::Instant; use std::time::Instant;
use std::{process, thread}; 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::config::{Config, MeasurementType};
use crate::netlink::Netlink; use crate::netlink::Netlink;
use crate::pinger::{PingListener, PingSender}; use crate::pinger::{PingListener, PingSender};
@@ -40,6 +46,11 @@ const VERSION: &str = env!("CARGO_PKG_VERSION");
fn main() -> anyhow::Result<()> { fn main() -> anyhow::Result<()> {
println!("Starting sqm-autorate version {}", VERSION); 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()?; let config = Config::new()?;
log::init(config.log_level)?; log::init(config.log_level)?;
if config.dry_run { if config.dry_run {