diff options
Diffstat (limited to 'vendor/backtrace/tests/concurrent-panics.rs')
-rw-r--r-- | vendor/backtrace/tests/concurrent-panics.rs | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/vendor/backtrace/tests/concurrent-panics.rs b/vendor/backtrace/tests/concurrent-panics.rs deleted file mode 100644 index a44a267..0000000 --- a/vendor/backtrace/tests/concurrent-panics.rs +++ /dev/null @@ -1,72 +0,0 @@ -use std::env; -use std::panic; -use std::process::Command; -use std::sync::atomic::{AtomicBool, Ordering::SeqCst}; -use std::sync::Arc; -use std::thread; - -const PANICS: usize = 100; -const THREADS: usize = 8; -const VAR: &str = "__THE_TEST_YOU_ARE_LUKE"; - -mod common; - -fn main() { - // If we cannot re-exec this test, there's no point in trying to do it. - if common::cannot_reexec_the_test() { - println!("test result: ok"); - return; - } - - if env::var(VAR).is_err() { - parent(); - } else { - child(); - } -} - -fn parent() { - let me = env::current_exe().unwrap(); - let result = Command::new(&me) - .env("RUST_BACKTRACE", "1") - .env(VAR, "1") - .output() - .unwrap(); - if result.status.success() { - println!("test result: ok"); - return; - } - println!("stdout:\n{}", String::from_utf8_lossy(&result.stdout)); - println!("stderr:\n{}", String::from_utf8_lossy(&result.stderr)); - println!("code: {}", result.status); - panic!(); -} - -fn child() { - let done = Arc::new(AtomicBool::new(false)); - let done2 = done.clone(); - let a = thread::spawn(move || { - while !done2.load(SeqCst) { - format!("{:?}", backtrace::Backtrace::new()); - } - }); - - let threads = (0..THREADS) - .map(|_| { - thread::spawn(|| { - for _ in 0..PANICS { - assert!(panic::catch_unwind(|| { - panic!(); - }) - .is_err()); - } - }) - }) - .collect::<Vec<_>>(); - for thread in threads { - thread.join().unwrap(); - } - - done.store(true, SeqCst); - a.join().unwrap(); -} |