simple-sigh 0.1.0

Simple signal handler, intended for examples.
Documentation
// Application-defined termination signal.

use std::sync::Arc;

use parking_lot::{Condvar, Mutex};


#[derive(Debug, Default)]
struct ReadWrite {
  term: bool
}

#[derive(Debug, Default)]
struct Shared {
  rw: Mutex<ReadWrite>,
  signal: Condvar
}

fn main() {
  //
  // Initialize signal handler
  //
  let _ = simple_sigh::init();

  //
  // Prepare shared state
  //
  let sh = Shared::default();
  let sh = Arc::new(sh);

  //
  // Set a signal handler callback
  //
  let sh2 = Arc::clone(&sh);
  #[allow(clippy::significant_drop_tightening)]
  simple_sigh::register(move |_| {
    println!("Received signal");
    let mut g = sh2.rw.lock();
    g.term = true;
    sh2.signal.notify_one();
  })
  .unwrap();

  //
  // Wait until abort
  //
  println!("Wait for interrupt/termination signal..");
  let mut g = sh.rw.lock();
  while !g.term {
    sh.signal.wait(&mut g);
  }
  println!("Bye!");
}

// vim: set ft=rust et sw=2 ts=2 sts=2 cinoptions=2 tw=79 :