diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2022-11-07 02:45:54 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-07 02:45:54 (GMT) |
commit | 58c8c1dee798d394344b5b56e890a2cff1c41082 (patch) | |
tree | 73ae42d3deba75653772fb633d7ce90ee49c4880 /Modules/faulthandler.c | |
parent | c4408d35f6595cc2f13de4aaabf8f11e0a5c4f90 (diff) | |
download | cpython-58c8c1dee798d394344b5b56e890a2cff1c41082.zip cpython-58c8c1dee798d394344b5b56e890a2cff1c41082.tar.gz cpython-58c8c1dee798d394344b5b56e890a2cff1c41082.tar.bz2 |
gh-96055: Update faulthandler to emit proper unexpect signal number (gh-99162)
(cherry picked from commit f626b7b504df454d289527a4f922b09deeae9e21)
Co-authored-by: Dong-hee Na <donghee.na@python.org>
Diffstat (limited to 'Modules/faulthandler.c')
-rw-r--r-- | Modules/faulthandler.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 4847c1c..04995d2 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -334,14 +334,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) */ @@ -351,9 +354,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); |