From: Victor Stinner Date: Tue, 17 Sep 2019 21:36:16 +0000 (+0200) Subject: bpo-38070: _Py_DumpTraceback() writes (GH-16244) X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8fa3e1740b3f03ea65ddb68411c2238c5f98eec2;p=python bpo-38070: _Py_DumpTraceback() writes (GH-16244) When a Python thread has no frame, _Py_DumpTraceback() and _Py_DumpTracebackThreads() now write "", rather than writing nothing. --- diff --git a/Python/traceback.c b/Python/traceback.c index f396f1ad98..8aaee12031 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -797,12 +797,15 @@ dump_traceback(int fd, PyThreadState *tstate, int write_header) PyFrameObject *frame; unsigned int depth; - if (write_header) + if (write_header) { PUTS(fd, "Stack (most recent call first):\n"); + } frame = _PyThreadState_GetFrame(tstate); - if (frame == NULL) + if (frame == NULL) { + PUTS(fd, "\n"); return; + } depth = 0; while (frame != NULL) { @@ -870,9 +873,9 @@ _Py_DumpTracebackThreads(int fd, PyInterpreterState *interp, Python thread state of the current thread. PyThreadState_Get() doesn't give the state of the thread that caused - the fault if the thread released the GIL, and so this function - cannot be used. Read the thread specific storage (TSS) instead: call - PyGILState_GetThisThreadState(). */ + the fault if the thread released the GIL, and so + _PyThreadState_GET() cannot be used. Read the thread specific + storage (TSS) instead: call PyGILState_GetThisThreadState(). */ current_tstate = PyGILState_GetThisThreadState(); }