mirror of
https://github.com/philmmanjaro/alma.git
synced 2025-07-26 23:19:29 +02:00
Signal handling (fix #7)
This commit is contained in:
parent
c543916366
commit
1ded17b500
16
src/main.rs
16
src/main.rs
@ -6,6 +6,7 @@ extern crate simplelog;
|
|||||||
extern crate structopt;
|
extern crate structopt;
|
||||||
extern crate tempfile;
|
extern crate tempfile;
|
||||||
extern crate which;
|
extern crate which;
|
||||||
|
use nix::sys::signal;
|
||||||
|
|
||||||
mod error;
|
mod error;
|
||||||
mod mountstack;
|
mod mountstack;
|
||||||
@ -165,6 +166,10 @@ fn create(disk: PathBuf) -> Result<(), Error> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" fn handle_sigint(_: i32) {
|
||||||
|
warn!("Interrupted");
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let app = App::from_args();
|
let app = App::from_args();
|
||||||
|
|
||||||
@ -172,6 +177,17 @@ fn main() {
|
|||||||
TermLogger::new(LevelFilter::Debug, Config::default()).unwrap(),
|
TermLogger::new(LevelFilter::Debug, Config::default()).unwrap(),
|
||||||
]).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 {
|
let result = match app {
|
||||||
App::Create { disk } => create(disk),
|
App::Create { disk } => create(disk),
|
||||||
};
|
};
|
||||||
|
@ -52,6 +52,7 @@ impl MountStack {
|
|||||||
impl Drop for MountStack {
|
impl Drop for MountStack {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
while let Some(target) = self.targets.pop() {
|
while let Some(target) = self.targets.pop() {
|
||||||
|
debug!("Unmounting {}", target.display());
|
||||||
if !umount(&target).is_ok() {
|
if !umount(&target).is_ok() {
|
||||||
warn!("Unable to mount {}", target.display());
|
warn!("Unable to mount {}", target.display());
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user