summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDong-hee Na <donghee.na@python.org>2022-11-07 01:19:25 (GMT)
committerGitHub <noreply@github.com>2022-11-07 01:19:25 (GMT)
commitf626b7b504df454d289527a4f922b09deeae9e21 (patch)
tree3cf70ffd4d2291222c3a1966dbd0fbb8fe49d62c
parent57a405213cd7565b7c327b594378e22a5fb2817e (diff)
downloadcpython-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.rst2
-rw-r--r--Modules/faulthandler.c20
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);