| author | |
| committer | |
| log | c31afc3736215ef68e7f838ede14c2a33828c9c7 |
| tree | 498427a5a901671da863e5cbc26d84d4f80c2a0c |
| parent | 9577ff1c904daf7384197b3ee84923bdc18afc28 |
| signature | Commit is signed but in an unrecognized format. |
2 files changed, 7 insertions(+), 14 deletions(-)
lib/std/os.zig+7-2| ... | @@ -225,10 +225,15 @@ pub fn raise(sig: u8) RaiseError!void { | ... | @@ -225,10 +225,15 @@ pub fn raise(sig: u8) RaiseError!void { |
| 225 | 225 | ||
| 226 | if (builtin.os == .linux) { | 226 | if (builtin.os == .linux) { |
| 227 | var set: linux.sigset_t = undefined; | 227 | var set: linux.sigset_t = undefined; |
| 228 | linux.blockAppSignals(&set); | 228 | // block application signals |
| 229 | _ = linux.sigprocmask(SIG_BLOCK, &linux.app_mask, &set); | ||
| 230 | |||
| 229 | const tid = linux.syscall0(linux.SYS_gettid); | 231 | const tid = linux.syscall0(linux.SYS_gettid); |
| 230 | const rc = linux.syscall2(linux.SYS_tkill, tid, sig); | 232 | const rc = linux.syscall2(linux.SYS_tkill, tid, sig); |
| 231 | linux.restoreSignals(&set); | 233 | |
| 234 | // restore signal mask | ||
| 235 | _ = linux.sigprocmask(SIG_SETMASK, &set, null); | ||
| 236 | |||
| 232 | switch (errno(rc)) { | 237 | switch (errno(rc)) { |
| 233 | 0 => return, | 238 | 0 => return, |
| 234 | else => |err| return unexpectedErrno(err), | 239 | else => |err| return unexpectedErrno(err), |
lib/std/os/linux.zig-12| ... | @@ -697,18 +697,6 @@ pub fn sigaction(sig: u6, noalias act: *const Sigaction, noalias oact: ?*Sigacti | ... | @@ -697,18 +697,6 @@ pub fn sigaction(sig: u6, noalias act: *const Sigaction, noalias oact: ?*Sigacti |
| 697 | return 0; | 697 | return 0; |
| 698 | } | 698 | } |
| 699 | 699 | ||
| 700 | pub fn blockAllSignals(set: *sigset_t) void { | ||
| 701 | _ = syscall4(SYS_rt_sigprocmask, SIG_BLOCK, @ptrToInt(&all_mask), @ptrToInt(set), NSIG / 8); | ||
| 702 | } | ||
| 703 | |||
| 704 | pub fn blockAppSignals(set: *sigset_t) void { | ||
| 705 | _ = syscall4(SYS_rt_sigprocmask, SIG_BLOCK, @ptrToInt(&app_mask), @ptrToInt(set), NSIG / 8); | ||
| 706 | } | ||
| 707 | |||
| 708 | pub fn restoreSignals(set: *sigset_t) void { | ||
| 709 | _ = syscall4(SYS_rt_sigprocmask, SIG_SETMASK, @ptrToInt(set), 0, NSIG / 8); | ||
| 710 | } | ||
| 711 | |||
| 712 | pub fn sigaddset(set: *sigset_t, sig: u6) void { | 700 | pub fn sigaddset(set: *sigset_t, sig: u6) void { |
| 713 | const s = sig - 1; | 701 | const s = sig - 1; |
| 714 | (set.*)[@intCast(usize, s) / usize.bit_count] |= @intCast(usize, 1) << (s & (usize.bit_count - 1)); | 702 | (set.*)[@intCast(usize, s) / usize.bit_count] |= @intCast(usize, 1) << (s & (usize.bit_count - 1)); |