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> 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 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, 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 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. */ This function is signal safe. */
PyAPI_DATA(int) _Py_DumpTraceback( PyAPI_DATA(void) _Py_DumpTraceback(
int fd, int fd,
PyThreadState *tstate); PyThreadState *tstate);

View File

@ -556,18 +556,19 @@ dump_frame(int fd, PyFrameObject *frame)
write(fd, "\n", 1); write(fd, "\n", 1);
} }
static int static void
dump_traceback(int fd, PyThreadState *tstate, int write_header) dump_traceback(int fd, PyThreadState *tstate, int write_header)
{ {
PyFrameObject *frame; PyFrameObject *frame;
unsigned int depth; unsigned int depth;
frame = _PyThreadState_GetFrame(tstate);
if (frame == NULL)
return -1;
if (write_header) if (write_header)
PUTS(fd, "Traceback (most recent call first):\n"); PUTS(fd, "Traceback (most recent call first):\n");
frame = _PyThreadState_GetFrame(tstate);
if (frame == NULL)
return;
depth = 0; depth = 0;
while (frame != NULL) { while (frame != NULL) {
if (MAX_FRAME_DEPTH <= depth) { if (MAX_FRAME_DEPTH <= depth) {
@ -580,13 +581,12 @@ dump_traceback(int fd, PyThreadState *tstate, int write_header)
frame = frame->f_back; frame = frame->f_back;
depth++; depth++;
} }
return 0;
} }
int void
_Py_DumpTraceback(int fd, PyThreadState *tstate) _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 /* Write the thread identifier into the file 'fd': "Current thread 0xHHHH:\" if