#![warn(rust_2018_idioms)]
#![cfg(feature = "full")]
#![cfg(unix)]
mod support {
pub mod signal;
}
use support::signal::send_signal;
use tokio::runtime::Runtime;
use tokio::signal::unix::{signal, SignalKind};
use std::sync::mpsc::channel;
use std::thread;
#[test]
fn multi_loop() {
let (sender, receiver) = channel();
for _ in 0..10 {
let threads: Vec<_> = (0..4)
.map(|_| {
let sender = sender.clone();
thread::spawn(move || {
let mut rt = rt();
let _ = rt.block_on(async {
let mut signal = signal(SignalKind::hangup()).unwrap();
sender.send(()).unwrap();
signal.recv().await
});
})
})
.collect();
for &_ in threads.iter() {
receiver.recv().unwrap();
}
send_signal(libc::SIGHUP);
for t in threads {
t.join().unwrap();
}
}
}
fn rt() -> Runtime {
tokio::runtime::Builder::new()
.basic_scheduler()
.enable_all()
.build()
.unwrap()
}