1 #![warn(rust_2018_idioms)]
2 #![cfg(feature = "full")]
3 #![cfg(unix)]
4 #![cfg(not(miri))] // No `sigaction` in miri.
5 
6 mod support {
7     pub mod signal;
8 }
9 use support::signal::send_signal;
10 
11 use tokio::signal::unix::{signal, SignalKind};
12 
13 #[tokio::test]
dropping_signal_does_not_deregister_any_other_instances()14 async fn dropping_signal_does_not_deregister_any_other_instances() {
15     let kind = SignalKind::user_defined1();
16 
17     // Signals should not starve based on ordering
18     let first_duplicate_signal = signal(kind).expect("failed to register first duplicate signal");
19     let mut sig = signal(kind).expect("failed to register signal");
20     let second_duplicate_signal = signal(kind).expect("failed to register second duplicate signal");
21 
22     drop(first_duplicate_signal);
23     drop(second_duplicate_signal);
24 
25     send_signal(libc::SIGUSR1);
26     let _ = sig.recv().await;
27 }
28