procman 0.23.2

A process supervisor with a dependency DAG and a typed .pman language
use std::sync::{Arc, atomic::AtomicBool};

use anyhow::{Context, Result};
use signal_hook::{
    consts::{SIGINT, SIGTERM},
    flag,
};

pub fn setup() -> Result<(Arc<AtomicBool>, Arc<AtomicBool>)> {
    let shutdown = Arc::new(AtomicBool::new(false));
    let signal_triggered = Arc::new(AtomicBool::new(false));
    flag::register(SIGINT, Arc::clone(&shutdown)).context("registering SIGINT handler")?;
    flag::register(SIGTERM, Arc::clone(&shutdown)).context("registering SIGTERM handler")?;
    flag::register(SIGINT, Arc::clone(&signal_triggered))
        .context("registering SIGINT signal_triggered")?;
    flag::register(SIGTERM, Arc::clone(&signal_triggered))
        .context("registering SIGTERM signal_triggered")?;
    Ok((shutdown, signal_triggered))
}