previously, we only held a lock for printing the backtrace itself. since all threads were printing to the same file descriptor, that meant random output in the default panic hook would be interleaved with the backtrace. now, we hold the lock for the full duration of the hook, and the output is ordered.
18 lines
467 B
Rust
18 lines
467 B
Rust
//@ run-pass
|
|
//@ check-run-results
|
|
//@ edition:2021
|
|
//@ exec-env:RUST_BACKTRACE=0
|
|
//@ needs-threads
|
|
use std::thread;
|
|
const PANIC_MESSAGE: &str = "oops oh no woe is me";
|
|
|
|
fn entry() {
|
|
panic!("{PANIC_MESSAGE}")
|
|
}
|
|
|
|
fn main() {
|
|
let (a, b) = (thread::spawn(entry), thread::spawn(entry));
|
|
assert_eq!(&**a.join().unwrap_err().downcast::<String>().unwrap(), PANIC_MESSAGE);
|
|
assert_eq!(&**b.join().unwrap_err().downcast::<String>().unwrap(), PANIC_MESSAGE);
|
|
}
|