diff --git a/src/compositor.rs b/src/compositor.rs index e94cdc05..91f0d8bb 100644 --- a/src/compositor.rs +++ b/src/compositor.rs @@ -63,6 +63,7 @@ use { pub const MAX_EXTENTS: i32 = (1 << 22) - 1; pub fn start_compositor(global: GlobalArgs, args: RunArgs) { + sighand::reset_all(); let forker = create_forker(); let portal = portal::run_from_compositor(global.log_level.into()); enable_profiler(); diff --git a/src/forker.rs b/src/forker.rs index 1dc12b98..35383b1b 100644 --- a/src/forker.rs +++ b/src/forker.rs @@ -339,7 +339,9 @@ impl Forker { } set_process_name("the ol' forker"); setup_deathsig(ppid); - reset_signals(); + unsafe { + c::signal(c::SIGCHLD, c::SIG_IGN); + } let socket = Rc::new(setup_fds(socket)); std::panic::set_hook({ let socket = socket.raw(); @@ -569,16 +571,6 @@ fn setup_fds(mut socket: OwnedFd) -> OwnedFd { socket } -fn reset_signals() { - const NSIG: c::c_int = 64; - unsafe { - for sig in 1..=NSIG { - c::signal(sig, c::SIG_DFL); - } - c::signal(c::SIGCHLD, c::SIG_IGN); - } -} - fn setup_deathsig(ppid: c::pid_t) { unsafe { let res = c::prctl(c::PR_SET_PDEATHSIG, c::SIGKILL as c::c_ulong); diff --git a/src/sighand.rs b/src/sighand.rs index bf464e06..8c6edb06 100644 --- a/src/sighand.rs +++ b/src/sighand.rs @@ -50,3 +50,15 @@ async fn handle_signals(fd: Rc, ring: Rc) { } } } + +pub fn reset_all() { + const NSIG: c::c_int = 64; + unsafe { + for sig in 1..=NSIG { + c::signal(sig, c::SIG_DFL); + } + } + let mut set: c::sigset_t = uapi::pod_zeroed(); + uapi::sigfillset(&mut set).unwrap(); + let _ = uapi::pthread_sigmask(c::SIG_UNBLOCK, Some(&set), None); +}