alnyan/yggdrasil: prevent crash loop when handling signals
This commit is contained in:
parent
f076438d64
commit
e1a6fab885
@ -55,8 +55,11 @@ pub(crate) unsafe fn set_signal_handler(signal: Signal, handler: SignalHandler)
|
||||
}
|
||||
|
||||
unsafe extern "C" fn common_signal_entry(data: &SignalEntryData) -> ! {
|
||||
use crate::io::Write;
|
||||
|
||||
let handler = SIGNAL_TABLE.lookup(data.signal).unwrap_or(SignalHandler::Terminate);
|
||||
let pid = crate::process::id();
|
||||
let mut stderr = crate::io::stderr();
|
||||
|
||||
match handler {
|
||||
SignalHandler::Function(f) => {
|
||||
@ -64,11 +67,11 @@ unsafe extern "C" fn common_signal_entry(data: &SignalEntryData) -> ! {
|
||||
sys::exit_signal(data);
|
||||
}
|
||||
SignalHandler::Ignore => {
|
||||
eprintln!("#{}: ignored {:?}", pid, data.signal);
|
||||
writeln!(stderr, "#{}: ignored {:?}", pid, data.signal).ok();
|
||||
sys::exit_signal(data);
|
||||
}
|
||||
SignalHandler::Terminate => {
|
||||
eprintln!("#{}: {:?}", pid, data.signal);
|
||||
writeln!(stderr, "#{}: {:?}", pid, data.signal).ok();
|
||||
sys::exit_process(OsExitCode::BySignal(data.signal));
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user