diff options
author | Michal 'vorner' Vaner <vorner@vorner.cz> | 2018-09-01 10:57:20 +0200 |
---|---|---|
committer | Michal 'vorner' Vaner <vorner@vorner.cz> | 2018-09-14 23:25:57 +0200 |
commit | 35687f1d187ec21019906f900e99f064bf55c0eb (patch) | |
tree | dc8d638ecc521655d5e05f8157bf74aa8a65bf33 /tokio-signal/tests/multi_loop.rs | |
parent | e7dc3a10916f298915ae40503b33041e53593c86 (diff) |
signal: Move to tokio-signal subdirectory
As a preparation to merge with tokio.
Diffstat (limited to 'tokio-signal/tests/multi_loop.rs')
-rw-r--r-- | tokio-signal/tests/multi_loop.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tokio-signal/tests/multi_loop.rs b/tokio-signal/tests/multi_loop.rs new file mode 100644 index 00000000..40facc19 --- /dev/null +++ b/tokio-signal/tests/multi_loop.rs @@ -0,0 +1,40 @@ +#![cfg(unix)] + +extern crate libc; + +use std::sync::mpsc::channel; +use std::thread; + +pub mod support; +use support::*; + +#[test] +fn multi_loop() { + // An "ordinary" (non-future) channel + let (sender, receiver) = channel(); + // Run multiple times, to make sure there are no race conditions + for _ in 0..10 { + // Run multiple event loops, each one in its own thread + let threads: Vec<_> = (0..4) + .map(|_| { + let sender = sender.clone(); + thread::spawn(move || { + let mut lp = Core::new().unwrap(); + let signal = lp.run(Signal::new(libc::SIGHUP)).unwrap(); + sender.send(()).unwrap(); + run_core_with_timeout(&mut lp, signal.into_future()).ok().unwrap(); + }) + }) + .collect(); + // Wait for them to declare they're ready + for &_ in threads.iter() { + receiver.recv().unwrap(); + } + // Send a signal + send_signal(libc::SIGHUP); + // Make sure the threads terminated correctly + for t in threads { + t.join().unwrap(); + } + } +} |