From 2853e2230ba099a3de7fa39945fb51dc7ef1d2ef Mon Sep 17 00:00:00 2001 From: Paul Lietar Date: Tue, 21 Feb 2017 23:25:04 +0000 Subject: [PATCH] Force shutdown on second ^C --- src/main.rs | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/main.rs b/src/main.rs index 17acd057..52cb8610 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,18 +1,19 @@ #[macro_use] extern crate log; -extern crate getopts; -extern crate librespot; extern crate ctrlc; extern crate env_logger; extern crate futures; +extern crate getopts; +extern crate librespot; extern crate tokio_core; use env_logger::LogBuilder; -use std::io::{stderr, Write}; -use std::process::exit; -use std::env; -use std::path::PathBuf; -use std::str::FromStr; use futures::Future; +use std::cell::{RefCell, Cell}; +use std::env; +use std::io::{stderr, Write}; +use std::path::PathBuf; +use std::process::exit; +use std::str::FromStr; use tokio_core::reactor::Core; use librespot::spirc::Spirc; @@ -173,10 +174,18 @@ fn main() { }); let (spirc, task) = Spirc::new(session.clone(), player, mixer); - let spirc = ::std::cell::RefCell::new(spirc); + let spirc = RefCell::new(spirc); + let shutting_down = Cell::new(false); ctrlc::set_handler(move || { - spirc.borrow_mut().shutdown(); + if shutting_down.get() { + warn!("Forced shutdown"); + exit(1); + } else { + info!("Shutting down"); + spirc.borrow_mut().shutdown(); + shutting_down.set(true); + } }); task.map_err(|()| panic!("spirc error"))