Issue #11393: _Py_DumpTraceback() writes the header even if there is no frame
diff --git a/Include/traceback.h b/Include/traceback.h
index 9a8f2a6..7734707 100644
--- a/Include/traceback.h
+++ b/Include/traceback.h
@@ -38,8 +38,6 @@
...
File "xxx", line xxx in <xxx>
- Return 0 on success, -1 on error.
-
This function is written for debug purpose only, to dump the traceback in
the worst case: after a segmentation fault, at fatal error, etc. That's why,
it is very limited. Strings are truncated to 100 characters and encoded to
@@ -49,7 +47,7 @@
This function is signal safe. */
-PyAPI_DATA(int) _Py_DumpTraceback(
+PyAPI_DATA(void) _Py_DumpTraceback(
int fd,
PyThreadState *tstate);
diff --git a/Python/traceback.c b/Python/traceback.c
index 37673d9..f0142da 100644
--- a/Python/traceback.c
+++ b/Python/traceback.c
@@ -556,18 +556,19 @@
write(fd, "\n", 1);
}
-static int
+static void
dump_traceback(int fd, PyThreadState *tstate, int write_header)
{
PyFrameObject *frame;
unsigned int depth;
- frame = _PyThreadState_GetFrame(tstate);
- if (frame == NULL)
- return -1;
-
if (write_header)
PUTS(fd, "Traceback (most recent call first):\n");
+
+ frame = _PyThreadState_GetFrame(tstate);
+ if (frame == NULL)
+ return;
+
depth = 0;
while (frame != NULL) {
if (MAX_FRAME_DEPTH <= depth) {
@@ -580,13 +581,12 @@
frame = frame->f_back;
depth++;
}
- return 0;
}
-int
+void
_Py_DumpTraceback(int fd, PyThreadState *tstate)
{
- return dump_traceback(fd, tstate, 1);
+ dump_traceback(fd, tstate, 1);
}
/* Write the thread identifier into the file 'fd': "Current thread 0xHHHH:\" if