()
| 262 | } |
| 263 | |
| 264 | pub fn add_ctrlc_handler() -> Arc<AtomicBool> { |
| 265 | let flag = Arc::new(AtomicBool::new(false)); |
| 266 | { |
| 267 | let flag = flag.clone(); |
| 268 | ctrlc::set_handler(move || { |
| 269 | if flag.swap(true, std::sync::atomic::Ordering::Relaxed) { |
| 270 | eprintln!("ctrl+c: cancel already attempted, exiting now..."); |
| 271 | std::process::exit(-1); |
| 272 | } |
| 273 | }) |
| 274 | .unwrap(); |
| 275 | } |
| 276 | flag |
| 277 | } |