diff options
author | Dong-hee Na <donghee.na@python.org> | 2022-11-07 01:19:25 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-07 01:19:25 (GMT) |
commit | f626b7b504df454d289527a4f922b09deeae9e21 (patch) | |
tree | 3cf70ffd4d2291222c3a1966dbd0fbb8fe49d62c | |
parent | 57a405213cd7565b7c327b594378e22a5fb2817e (diff) | |
download | cpython-f626b7b504df454d289527a4f922b09deeae9e21.zip cpython-f626b7b504df454d289527a4f922b09deeae9e21.tar.gz cpython-f626b7b504df454d289527a4f922b09deeae9e21.tar.bz2 |
gh-96055: Update faulthandler to emit proper unexpect signal number (gh-99162)
-rw-r--r-- | Misc/NEWS.d/next/Core and Builtins/2022-11-06-22-59-02.gh-issue-96055.TmQuJn.rst | 2 | ||||
-rw-r--r-- | Modules/faulthandler.c | 20 |
2 files changed, 18 insertions, 4 deletions
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-11-06-22-59-02.gh-issue-96055.TmQuJn.rst b/Misc/NEWS.d/next/Core and Builtins/2022-11-06-22-59-02.gh-issue-96055.TmQuJn.rst new file mode 100644 index 0000000..c72fb21 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2022-11-06-22-59-02.gh-issue-96055.TmQuJn.rst @@ -0,0 +1,2 @@ +Update :mod:`faulthandler` to emit an error message with the proper +unexpected signal number. Patch by Dong-hee Na. diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 2f6a219..fa4c2d0 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -333,14 +333,17 @@ faulthandler_fatal_error(int signum) size_t i; fault_handler_t *handler = NULL; int save_errno = errno; + int found = 0; if (!fatal_error.enabled) return; for (i=0; i < faulthandler_nsignals; i++) { handler = &faulthandler_handlers[i]; - if (handler->signum == signum) + if (handler->signum == signum) { + found = 1; break; + } } if (handler == NULL) { /* faulthandler_nsignals == 0 (unlikely) */ @@ -350,9 +353,18 @@ faulthandler_fatal_error(int signum) /* restore the previous handler */ faulthandler_disable_fatal_handler(handler); - PUTS(fd, "Fatal Python error: "); - PUTS(fd, handler->name); - PUTS(fd, "\n\n"); + if (found) { + PUTS(fd, "Fatal Python error: "); + PUTS(fd, handler->name); + PUTS(fd, "\n\n"); + } + else { + char unknown_signum[23] = {0,}; + snprintf(unknown_signum, 23, "%d", signum); + PUTS(fd, "Fatal Python error from unexpected signum: "); + PUTS(fd, unknown_signum); + PUTS(fd, "\n\n"); + } faulthandler_dump_traceback(fd, fatal_error.all_threads, fatal_error.interp); |