Issue #11393: _Py_DumpTraceback() writes the header even if there is no frame

This commit is contained in:
Victor Stinner 2011-04-01 15:34:01 +02:00
parent a01ca12a52
commit fcb88c4503
2 changed files with 9 additions and 11 deletions

View file

@ -38,8 +38,6 @@ PyAPI_DATA(PyTypeObject) PyTraceBack_Type;
...
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 @@ PyAPI_DATA(PyTypeObject) PyTraceBack_Type;
This function is signal safe. */
PyAPI_DATA(int) _Py_DumpTraceback(
PyAPI_DATA(void) _Py_DumpTraceback(
int fd,
PyThreadState *tstate);

View file

@ -556,18 +556,19 @@ dump_frame(int fd, PyFrameObject *frame)
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 @@ dump_traceback(int fd, PyThreadState *tstate, int write_header)
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