//@ run-pass
//@ needs-unwind

#![allow(stable_features)]
#![allow(unused_must_use)]

//@ ignore-emscripten no threads support

#![feature(std_panic)]

use std::panic;
use std::thread;

fn a() {
    panic::set_hook(Box::new(|_| println!("hello yes this is a")));
    panic::take_hook();
    panic::set_hook(Box::new(|_| println!("hello yes this is a part 2")));
    panic::take_hook();
}

fn b() {
    panic::take_hook();
    panic::take_hook();
    panic::take_hook();
    panic::take_hook();
    panic::take_hook();
    panic!();
}

fn c() {
    panic::set_hook(Box::new(|_| ()));
    panic::set_hook(Box::new(|_| ()));
    panic::set_hook(Box::new(|_| ()));
    panic::set_hook(Box::new(|_| ()));
    panic::set_hook(Box::new(|_| ()));
    panic::set_hook(Box::new(|_| ()));
    panic!();
}

fn main() {
    for _ in 0..10 {
        let mut handles = vec![];
        for _ in 0..10 {
            handles.push(thread::spawn(a));
        }
        for _ in 0..10 {
            handles.push(thread::spawn(b));
        }
        for _ in 0..10 {
            handles.push(thread::spawn(c));
        }
        for handle in handles {
            let _ = handle.join();
        }
    }
}
