kumo_server_common/
panic.rs1use nix::sys::signal::{kill, SIGQUIT};
2use nix::unistd::Pid;
3
4pub fn register_panic_hook() {
5 let default_hook = std::panic::take_hook();
6 std::panic::set_hook(Box::new(move |info| {
7 let payload = info.payload();
8 let payload = payload.downcast_ref::<&str>().unwrap_or(&"!?");
9 let bt = backtrace::Backtrace::new();
10 if let Some(loc) = info.location() {
11 tracing::error!(
12 "panic at {}:{}:{} - {}\n{:?}",
13 loc.file(),
14 loc.line(),
15 loc.column(),
16 payload,
17 bt
18 );
19 } else {
20 tracing::error!("panic - {}\n{:?}", payload, bt);
21 }
22
23 default_hook(info);
24
25 kill(Pid::this(), SIGQUIT).ok();
27 }));
28}