authorgravatar for misakikasumi@outlook.comMisaki Kasumi <misakikasumi@outlook.com> 2025-04-02 18:36:40+08:00
committergravatar for misakikasumi@outlook.comMisaki Kasumi <misakikasumi@outlook.com> 2025-04-02 18:50:14+08:00
logaa832d6a6dbde8a0753d6aa59cc8199b009ea260
tree4d19d7fe5a0f8360b0749abb0bc743afce7b9085
parentcc65eaf0a982066a8655632c04db11f7c0c5d0ad

std.os.linux: block all signals in raise


1 files changed, 10 insertions(+), 0 deletions(-)

lib/std/posix.zig+10
......@@ -720,9 +720,19 @@ pub fn raise(sig: u8) RaiseError!void {
720720 }
721721
722722 if (native_os == .linux) {
723 // https://git.musl-libc.org/cgit/musl/commit/?id=0bed7e0acfd34e3fb63ca0e4d99b7592571355a9
724 //
725 // Unlike musl, libc-less Zig std does not have any internal signals for implementation purposes, so we
726 // need to block all signals on the assumption that any of them could potentially fork() in a handler.
727 var set: sigset_t = undefined;
728 sigprocmask(SIG.BLOCK, &linux.all_mask, &set);
729
723730 const tid = linux.gettid();
724731 const rc = linux.tkill(tid, sig);
725732
733 // restore signal mask
734 sigprocmask(SIG.SETMASK, &set, null);
735
726736 switch (errno(rc)) {
727737 .SUCCESS => return,
728738 else => |err| return unexpectedErrno(err),