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()14async 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