Signal handling (fix #7)

This commit is contained in:
Roey Darwish Dror 2018-11-04 16:31:03 +02:00
parent c543916366
commit 1ded17b500
2 changed files with 17 additions and 0 deletions

View File

@ -6,6 +6,7 @@ extern crate simplelog;
extern crate structopt;
extern crate tempfile;
extern crate which;
use nix::sys::signal;
mod error;
mod mountstack;
@ -165,6 +166,10 @@ fn create(disk: PathBuf) -> Result<(), Error> {
Ok(())
}
extern "C" fn handle_sigint(_: i32) {
warn!("Interrupted");
}
fn main() {
let app = App::from_args();
@ -172,6 +177,17 @@ fn main() {
TermLogger::new(LevelFilter::Debug, Config::default()).unwrap(),
]).unwrap();
let sig_action = signal::SigAction::new(
signal::SigHandler::Handler(handle_sigint),
signal::SaFlags::empty(),
signal::SigSet::empty(),
);
unsafe {
signal::sigaction(signal::SIGINT, &sig_action).unwrap();
signal::sigaction(signal::SIGTERM, &sig_action).unwrap();
signal::sigaction(signal::SIGQUIT, &sig_action).unwrap();
}
let result = match app {
App::Create { disk } => create(disk),
};

View File

@ -52,6 +52,7 @@ impl MountStack {
impl Drop for MountStack {
fn drop(&mut self) {
while let Some(target) = self.targets.pop() {
debug!("Unmounting {}", target.display());
if !umount(&target).is_ok() {
warn!("Unable to mount {}", target.display());
};