wip: initial test

This commit is contained in:
2023-11-22 13:23:39 +11:00
parent ce9df6364f
commit 3cf595f08e
7 changed files with 130 additions and 30 deletions

View File

@@ -1,9 +1,10 @@
use std::error;
use tokio::signal::unix::{signal, SignalKind};
use tokio::select;
use tokio::sync::watch::Sender;
use std::sync::{Arc, Mutex};
use tokio_util::sync::CancellationToken;
pub async fn sighandler(s: Sender<i32>) -> Result<(), Box<dyn error::Error + Send + Sync>> {
pub async fn sighandler(flag: Arc<Mutex<bool>>, cancel: CancellationToken, exit: CancellationToken) -> Result<(), Box<dyn error::Error + Send + Sync>> {
let mut sigint = signal(SignalKind::interrupt())?;
let mut sigterm = signal(SignalKind::terminate())?;
let mut sigchld = signal(SignalKind::child())?;
@@ -12,20 +13,28 @@ pub async fn sighandler(s: Sender<i32>) -> Result<(), Box<dyn error::Error + Sen
select! {
_ = sigint.recv() => {
println!("got SIGINT");
drop(s);
break 'signal;
initiate_stop(flag.clone(), cancel.clone());
},
_ = sigterm.recv() => {
println!("got SIGTERM");
drop(s);
break 'signal;
initiate_stop(flag.clone(), cancel.clone());
},
_ = sigchld.recv() => {
// do nothing intentionally
// return Err(())
},
_ = exit.cancelled() => {
break 'signal;
}
}
}
}
Ok(())
}
fn initiate_stop(flag: Arc<Mutex<bool>>, cancel: CancellationToken) {
{
let mut fl = flag.lock().unwrap();
*fl = true;
}
cancel.cancel();
}