use core::panic::PanicInfo;
use spin::Mutex;
use windows_sys::Win32::System::Threading::{ExitProcess, GetCurrentProcess, TerminateProcess};
pub type PanicHook = unsafe fn(&PanicInfo) -> ();
static PANIC_HOOK: Mutex<Option<PanicHook>> = Mutex::new(None);
pub fn set_hook(hook: Option<PanicHook>) {
*PANIC_HOOK.lock() = hook;
}
#[panic_handler]
unsafe fn on_panic(panic_info: &PanicInfo) -> ! {
if let Some(hook) = { PANIC_HOOK.lock().clone() } {
unsafe { hook(panic_info) };
}
unsafe {
TerminateProcess(GetCurrentProcess(), 197);
ExitProcess(197);
}
}
#[cfg(not(test))]
#[unsafe(no_mangle)]
fn rust_eh_personality() {}