@@ -890,6 +890,8 @@ _Py_DumpASCII(int fd, PyObject *text)
890890staticvoid
891891dump_frame(intfd, _PyInterpreterFrame*frame)
892892{
893+assert(frame->owner!=FRAME_OWNED_BY_CSTACK);
894+893895PyCodeObject*code=_PyFrame_GetCode(frame);
894896PUTS(fd, " File ");
895897if (code->co_filename!=NULL
@@ -963,6 +965,17 @@ dump_traceback(int fd, PyThreadState *tstate, int write_header)
963965964966unsigned intdepth=0;
965967while (1) {
968+if (frame->owner==FRAME_OWNED_BY_CSTACK) {
969+/* Trampoline frame */
970+frame=frame->previous;
971+if (frame==NULL) {
972+break;
973+ }
974+975+/* Can't have more than one shim frame in a row */
976+assert(frame->owner!=FRAME_OWNED_BY_CSTACK);
977+ }
978+966979if (MAX_FRAME_DEPTH <= depth) {
967980if (MAX_FRAME_DEPTH<depth) {
968981PUTS(fd, "plus ");
@@ -971,20 +984,12 @@ dump_traceback(int fd, PyThreadState *tstate, int write_header)
971984 }
972985break;
973986 }
987+974988dump_frame(fd, frame);
975989frame=frame->previous;
976990if (frame==NULL) {
977991break;
978992 }
979-if (frame->owner==FRAME_OWNED_BY_CSTACK) {
980-/* Trampoline frame */
981-frame=frame->previous;
982- }
983-if (frame==NULL) {
984-break;
985- }
986-/* Can't have more than one shim frame in a row */
987-assert(frame->owner!=FRAME_OWNED_BY_CSTACK);
988993depth++;
989994 }
990995}