Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf4c9f39

Browse files
authored
[3.12]gh-123967: Fix faulthandler for trampoline frames (#127329) (#127363)
gh-123967: Fix faulthandler for trampoline frames (#127329)If the top-most frame is a trampoline frame, skip it.(cherry picked from commit58e334e)
1 parentc3bb32d commitf4c9f39

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix faulthandler for trampoline frames. If the top-most frame is a
2+
trampoline frame, skip it. Patch by Victor Stinner.

‎Python/traceback.c‎

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1242,6 +1242,8 @@ _Py_DumpASCII(int fd, PyObject *text)
12421242
staticvoid
12431243
dump_frame(intfd,_PyInterpreterFrame*frame)
12441244
{
1245+
assert(frame->owner!=FRAME_OWNED_BY_CSTACK);
1246+
12451247
PyCodeObject*code=frame->f_code;
12461248
PUTS(fd," File ");
12471249
if (code->co_filename!=NULL
@@ -1315,24 +1317,27 @@ dump_traceback(int fd, PyThreadState *tstate, int write_header)
13151317

13161318
unsignedintdepth=0;
13171319
while (1) {
1320+
if (frame->owner==FRAME_OWNED_BY_CSTACK) {
1321+
/* Trampoline frame */
1322+
frame=frame->previous;
1323+
if (frame==NULL) {
1324+
break;
1325+
}
1326+
1327+
/* Can't have more than one shim frame in a row */
1328+
assert(frame->owner!=FRAME_OWNED_BY_CSTACK);
1329+
}
1330+
13181331
if (MAX_FRAME_DEPTH <=depth) {
13191332
PUTS(fd," ...\n");
13201333
break;
13211334
}
1335+
13221336
dump_frame(fd,frame);
13231337
frame=frame->previous;
13241338
if (frame==NULL) {
13251339
break;
13261340
}
1327-
if (frame->owner==FRAME_OWNED_BY_CSTACK) {
1328-
/* Trampoline frame */
1329-
frame=frame->previous;
1330-
}
1331-
if (frame==NULL) {
1332-
break;
1333-
}
1334-
/* Can't have more than one shim frame in a row */
1335-
assert(frame->owner!=FRAME_OWNED_BY_CSTACK);
13361341
depth++;
13371342
}
13381343
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp