workflow_service/
signals.rs1use crate::imports::*;
2
3pub trait Shutdown {
4 fn shutdown(&self);
5}
6
7pub struct Signals {
8 runtime: Runtime,
9 iterations: AtomicU64,
10}
11
12impl Signals {
13 pub fn bind(runtime: &Runtime) {
14 let signals = Arc::new(Signals {
15 runtime: runtime.clone(),
16 iterations: AtomicU64::new(0),
17 });
18
19 ctrlc::set_handler(move || {
20 let v = signals.iterations.fetch_add(1, Ordering::SeqCst);
21
22 match v {
23 0 => {
24 println!("^SIGTERM - shutting down...");
25 signals.runtime.terminate();
26 }
27 _ => {
28 println!("^SIGTERM - halting");
29 std::process::exit(1);
30 }
31 }
32 })
33 .expect("Error setting signal handler");
34 }
35}