From: Peter Bierma Date: Wed, 20 Nov 2024 17:27:19 +0000 (-0500) Subject: gh-121058: Warn if `PyThreadState_Clear` is called with an exception set (gh-121343) X-Git-Tag: v3.14.0a3~275 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6c1a4fb6d400827155fd70e48d682e35397731a1;p=thirdparty%2FPython%2Fcpython.git gh-121058: Warn if `PyThreadState_Clear` is called with an exception set (gh-121343) --- diff --git a/Misc/NEWS.d/next/C API/2024-07-03-13-39-13.gh-issue-121058.MKi1MV.rst b/Misc/NEWS.d/next/C API/2024-07-03-13-39-13.gh-issue-121058.MKi1MV.rst new file mode 100644 index 000000000000..133d8cb6fe4b --- /dev/null +++ b/Misc/NEWS.d/next/C API/2024-07-03-13-39-13.gh-issue-121058.MKi1MV.rst @@ -0,0 +1,2 @@ +``PyThreadState_Clear()`` now warns (and calls ``sys.excepthook``) if the +thread state still has an active exception. diff --git a/Python/pystate.c b/Python/pystate.c index 01e54fc745de..44f55be5b5b7 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -1649,6 +1649,11 @@ PyThreadState_Clear(PyThreadState *tstate) "PyThreadState_Clear: warning: thread still has a frame\n"); } + if (verbose && tstate->current_exception != NULL) { + fprintf(stderr, "PyThreadState_Clear: warning: thread has an exception set\n"); + _PyErr_Print(tstate); + } + /* At this point tstate shouldn't be used any more, neither to run Python code nor for other uses.