diff options
author | Mark Shannon <mark@hotpy.org> | 2023-12-12 19:02:24 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-12 19:02:24 (GMT) |
commit | 956023826a393b5704d3414dcd01f1bcbeaeda15 (patch) | |
tree | 733a71e8bdcbb8630c89375bf6bc1d5e51b5b5c4 /Python/bytecodes.c | |
parent | 9898e6104171dcdd88b32776e69ca2cddf515e63 (diff) | |
download | cpython-956023826a393b5704d3414dcd01f1bcbeaeda15.zip cpython-956023826a393b5704d3414dcd01f1bcbeaeda15.tar.gz cpython-956023826a393b5704d3414dcd01f1bcbeaeda15.tar.bz2 |
GH-108866: Guarantee forward progress in executors. (GH-113006)
Diffstat (limited to 'Python/bytecodes.c')
-rw-r--r-- | Python/bytecodes.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/Python/bytecodes.c b/Python/bytecodes.c index e0f3735..1ae8342 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -2352,20 +2352,17 @@ dummy_func( PyCodeObject *code = _PyFrame_GetCode(frame); _PyExecutorObject *executor = (_PyExecutorObject *)code->co_executors->executors[oparg&255]; - int original_oparg = executor->vm_data.oparg | (oparg & 0xfffff00); - JUMPBY(1-original_oparg); - frame->instr_ptr = next_instr; Py_INCREF(executor); if (executor->execute == _PyUOpExecute) { current_executor = (_PyUOpExecutorObject *)executor; GOTO_TIER_TWO(); } - frame = executor->execute(executor, frame, stack_pointer); - if (frame == NULL) { - frame = tstate->current_frame; + next_instr = executor->execute(executor, frame, stack_pointer); + frame = tstate->current_frame; + if (next_instr == NULL) { goto resume_with_error; } - goto enter_tier_one; + stack_pointer = _PyFrame_GetStackPointer(frame); } replaced op(_POP_JUMP_IF_FALSE, (unused/1, cond -- )) { |