compositor: reset all signals during startup
This commit is contained in:
parent
456457eade
commit
fdfc20452f
3 changed files with 16 additions and 11 deletions
|
|
@ -63,6 +63,7 @@ use {
|
||||||
pub const MAX_EXTENTS: i32 = (1 << 22) - 1;
|
pub const MAX_EXTENTS: i32 = (1 << 22) - 1;
|
||||||
|
|
||||||
pub fn start_compositor(global: GlobalArgs, args: RunArgs) {
|
pub fn start_compositor(global: GlobalArgs, args: RunArgs) {
|
||||||
|
sighand::reset_all();
|
||||||
let forker = create_forker();
|
let forker = create_forker();
|
||||||
let portal = portal::run_from_compositor(global.log_level.into());
|
let portal = portal::run_from_compositor(global.log_level.into());
|
||||||
enable_profiler();
|
enable_profiler();
|
||||||
|
|
|
||||||
|
|
@ -339,7 +339,9 @@ impl Forker {
|
||||||
}
|
}
|
||||||
set_process_name("the ol' forker");
|
set_process_name("the ol' forker");
|
||||||
setup_deathsig(ppid);
|
setup_deathsig(ppid);
|
||||||
reset_signals();
|
unsafe {
|
||||||
|
c::signal(c::SIGCHLD, c::SIG_IGN);
|
||||||
|
}
|
||||||
let socket = Rc::new(setup_fds(socket));
|
let socket = Rc::new(setup_fds(socket));
|
||||||
std::panic::set_hook({
|
std::panic::set_hook({
|
||||||
let socket = socket.raw();
|
let socket = socket.raw();
|
||||||
|
|
@ -569,16 +571,6 @@ fn setup_fds(mut socket: OwnedFd) -> OwnedFd {
|
||||||
socket
|
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) {
|
fn setup_deathsig(ppid: c::pid_t) {
|
||||||
unsafe {
|
unsafe {
|
||||||
let res = c::prctl(c::PR_SET_PDEATHSIG, c::SIGKILL as c::c_ulong);
|
let res = c::prctl(c::PR_SET_PDEATHSIG, c::SIGKILL as c::c_ulong);
|
||||||
|
|
|
||||||
|
|
@ -50,3 +50,15 @@ async fn handle_signals(fd: Rc<OwnedFd>, ring: Rc<IoUring>) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue