diff --git a/lib/std/os.zig b/lib/std/os.zig index 3cc43357bd..1c4ef01330 100644 --- a/lib/std/os.zig +++ b/lib/std/os.zig @@ -225,10 +225,15 @@ pub fn raise(sig: u8) RaiseError!void { if (builtin.os == .linux) { var set: linux.sigset_t = undefined; - linux.blockAppSignals(&set); + // block application signals + _ = linux.sigprocmask(SIG_BLOCK, &linux.app_mask, &set); + const tid = linux.syscall0(linux.SYS_gettid); const rc = linux.syscall2(linux.SYS_tkill, tid, sig); - linux.restoreSignals(&set); + + // restore signal mask + _ = linux.sigprocmask(SIG_SETMASK, &set, null); + switch (errno(rc)) { 0 => return, else => |err| return unexpectedErrno(err), diff --git a/lib/std/os/linux.zig b/lib/std/os/linux.zig index 1adfa1babc..89f3ef7566 100644 --- a/lib/std/os/linux.zig +++ b/lib/std/os/linux.zig @@ -697,18 +697,6 @@ pub fn sigaction(sig: u6, noalias act: *const Sigaction, noalias oact: ?*Sigacti return 0; } -pub fn blockAllSignals(set: *sigset_t) void { - _ = syscall4(SYS_rt_sigprocmask, SIG_BLOCK, @ptrToInt(&all_mask), @ptrToInt(set), NSIG / 8); -} - -pub fn blockAppSignals(set: *sigset_t) void { - _ = syscall4(SYS_rt_sigprocmask, SIG_BLOCK, @ptrToInt(&app_mask), @ptrToInt(set), NSIG / 8); -} - -pub fn restoreSignals(set: *sigset_t) void { - _ = syscall4(SYS_rt_sigprocmask, SIG_SETMASK, @ptrToInt(set), 0, NSIG / 8); -} - pub fn sigaddset(set: *sigset_t, sig: u6) void { const s = sig - 1; (set.*)[@intCast(usize, s) / usize.bit_count] |= @intCast(usize, 1) << (s & (usize.bit_count - 1));