1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2022 The ChromiumOS Authors 2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file. 4*bb4ee6a4SAndroid Build Coastguard Worker 5*bb4ee6a4SAndroid Build Coastguard Worker use std::panic; 6*bb4ee6a4SAndroid Build Coastguard Worker use std::process::abort; 7*bb4ee6a4SAndroid Build Coastguard Worker 8*bb4ee6a4SAndroid Build Coastguard Worker /// The intent of our panic hook is to get panic info and a stacktrace into the syslog, even for 9*bb4ee6a4SAndroid Build Coastguard Worker /// jailed subprocesses. It will always abort on panic to ensure a minidump is generated. 10*bb4ee6a4SAndroid Build Coastguard Worker /// 11*bb4ee6a4SAndroid Build Coastguard Worker /// Note that jailed processes will usually have a stacktrace of \<unknown\> because the backtrace 12*bb4ee6a4SAndroid Build Coastguard Worker /// routines attempt to open this binary and are unable to do so in a jail. set_panic_hook()13*bb4ee6a4SAndroid Build Coastguard Workerpub fn set_panic_hook() { 14*bb4ee6a4SAndroid Build Coastguard Worker let default_panic = panic::take_hook(); 15*bb4ee6a4SAndroid Build Coastguard Worker panic::set_hook(Box::new(move |info| { 16*bb4ee6a4SAndroid Build Coastguard Worker // Ensure all in-flight metrics are fully flushed 17*bb4ee6a4SAndroid Build Coastguard Worker metrics::get_destructor().cleanup(); 18*bb4ee6a4SAndroid Build Coastguard Worker // TODO(b/144724919): should update log_panic_info for this "cleanly exit crosvm" bug 19*bb4ee6a4SAndroid Build Coastguard Worker // log_panic_info(default_panic.as_ref(), info); 20*bb4ee6a4SAndroid Build Coastguard Worker default_panic(info); 21*bb4ee6a4SAndroid Build Coastguard Worker // Abort to trigger the crash reporter so that a minidump is generated. 22*bb4ee6a4SAndroid Build Coastguard Worker abort(); 23*bb4ee6a4SAndroid Build Coastguard Worker })); 24*bb4ee6a4SAndroid Build Coastguard Worker } 25