summaryrefslogtreecommitdiffstats
path: root/Python/bytecodes.c
diff options
context:
space:
mode:
authorMark Shannon <mark@hotpy.org>2023-12-12 19:02:24 (GMT)
committerGitHub <noreply@github.com>2023-12-12 19:02:24 (GMT)
commit956023826a393b5704d3414dcd01f1bcbeaeda15 (patch)
tree733a71e8bdcbb8630c89375bf6bc1d5e51b5b5c4 /Python/bytecodes.c
parent9898e6104171dcdd88b32776e69ca2cddf515e63 (diff)
downloadcpython-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.c11
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 -- )) {