diff options
| author | Alex Rønne Petersen <alex@alexrp.com> | 2024-07-21 13:31:06 +0200 |
|---|---|---|
| committer | Alex Rønne Petersen <alex@alexrp.com> | 2024-07-21 22:38:09 +0200 |
| commit | 2cced8903e07066a724a81257dadae233dd5893f (patch) | |
| tree | b362b1feea40b538fde6cf2ee503125107414415 /lib/std/debug.zig | |
| parent | 4d2868f24298981f67dea03ab523a97fd9399a43 (diff) | |
| download | zig-2cced8903e07066a724a81257dadae233dd5893f.tar.gz zig-2cced8903e07066a724a81257dadae233dd5893f.zip | |
std.posix: Consider invalid signal numbers to sigaction() to be programmer error.
The set of signals that cannot have their action changed is documented in POSIX,
and any additional, non-standard signals are documented by the specific OS. I
see no valid reason why EINVAL should be considered an unpredictable error here.
Diffstat (limited to 'lib/std/debug.zig')
| -rw-r--r-- | lib/std/debug.zig | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/lib/std/debug.zig b/lib/std/debug.zig index bc7023eae2..be561adf4b 100644 --- a/lib/std/debug.zig +++ b/lib/std/debug.zig @@ -2601,11 +2601,11 @@ pub fn maybeEnableSegfaultHandler() void { var windows_segfault_handle: ?windows.HANDLE = null; -pub fn updateSegfaultHandler(act: ?*const posix.Sigaction) error{OperationNotSupported}!void { - try posix.sigaction(posix.SIG.SEGV, act, null); - try posix.sigaction(posix.SIG.ILL, act, null); - try posix.sigaction(posix.SIG.BUS, act, null); - try posix.sigaction(posix.SIG.FPE, act, null); +pub fn updateSegfaultHandler(act: ?*const posix.Sigaction) void { + posix.sigaction(posix.SIG.SEGV, act, null); + posix.sigaction(posix.SIG.ILL, act, null); + posix.sigaction(posix.SIG.BUS, act, null); + posix.sigaction(posix.SIG.FPE, act, null); } /// Attaches a global SIGSEGV handler which calls `@panic("segmentation fault");` @@ -2623,9 +2623,7 @@ pub fn attachSegfaultHandler() void { .flags = (posix.SA.SIGINFO | posix.SA.RESTART | posix.SA.RESETHAND), }; - updateSegfaultHandler(&act) catch { - @panic("unable to install segfault handler, maybe adjust have_segfault_handling_support in std/debug.zig"); - }; + updateSegfaultHandler(&act); } fn resetSegfaultHandler() void { @@ -2641,8 +2639,7 @@ fn resetSegfaultHandler() void { .mask = posix.empty_sigset, .flags = 0, }; - // To avoid a double-panic, do nothing if an error happens here. - updateSegfaultHandler(&act) catch {}; + updateSegfaultHandler(&act); } fn handleSegfaultPosix(sig: i32, info: *const posix.siginfo_t, ctx_ptr: ?*anyopaque) callconv(.C) noreturn { |
