diff --git a/redox-rt/src/signal.rs b/redox-rt/src/signal.rs index ccb64d453e5972af4571d541c688c0b3ce723e83..af56b33473836e56946fee4ce52d0c1d268acb26 100644 --- a/redox-rt/src/signal.rs +++ b/redox-rt/src/signal.rs @@ -389,6 +389,17 @@ const fn sig_bit(sig: usize) -> u64 { pub fn setup_sighandler(area: &RtSigarea) { { let mut sigactions = SIGACTIONS_LOCK.lock(); + for (sig_idx, action) in PROC_CONTROL_STRUCT.actions.iter().enumerate() { + let sig = sig_idx + 1; + let bits = if matches!(sig, SIGTSTP | SIGTTIN | SIGTTOU) { + SigactionFlags::SIG_SPECIFIC + } else if matches!(sig, SIGCHLD | SIGURG | SIGWINCH) { + SigactionFlags::IGNORED + } else { + SigactionFlags::empty() + }; + action.first.store((u64::from(bits.bits()) << 32) | default_handler as u64, Ordering::Relaxed); + } } let arch = unsafe { &mut *area.arch.get() }; {