sqlite_graphrag/
signals.rs1use std::sync::atomic::Ordering;
4
5pub fn register_shutdown_handler() {
13 if let Err(e) = ctrlc::set_handler(move || {
14 let prev = crate::SIGNAL_COUNT.fetch_add(1, Ordering::AcqRel);
15 if prev == 0 {
16 crate::SHUTDOWN.store(true, Ordering::Release);
17 crate::SIGNAL_NUMBER.store(2, Ordering::Release);
18 crate::cancel_token().cancel();
19 tracing::warn!(
20 target: "signals",
21 "shutdown signal received; finishing current operation gracefully"
22 );
23 } else {
24 eprintln!("\nForced shutdown (second signal received). Exiting immediately.");
25 std::process::exit(130);
26 }
27 }) {
28 tracing::warn!(target: "signals", error = %e, "signal handler registration failed");
29 }
30}