diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2025-12-16-20-38-17.gh-issue-142448.mAFqwL.rst b/Misc/NEWS.d/next/Core_and_Builtins/2025-12-16-20-38-17.gh-issue-142448.mAFqwL.rst new file mode 100644 index 00000000000..bcc7c1fb12d --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2025-12-16-20-38-17.gh-issue-142448.mAFqwL.rst @@ -0,0 +1 @@ +Fix a bug when using monitoring with the JIT. diff --git a/Python/bytecodes.c b/Python/bytecodes.c index da06d53f144..5c23b2f0cc9 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -5575,9 +5575,14 @@ dummy_func( next_instr = this_instr; frame->instr_ptr = prev_instr; opcode = next_instr->op.code; - bool stop_tracing = (opcode == WITH_EXCEPT_START || - opcode == RERAISE || opcode == CLEANUP_THROW || - opcode == PUSH_EXC_INFO || opcode == INTERPRETER_EXIT); + bool stop_tracing = ( + opcode == WITH_EXCEPT_START || + opcode == RERAISE || + opcode == CLEANUP_THROW || + opcode == PUSH_EXC_INFO || + opcode == INTERPRETER_EXIT || + (opcode >= MIN_INSTRUMENTED_OPCODE && opcode != ENTER_EXECUTOR) + ); int full = !_PyJit_translate_single_bytecode_to_trace(tstate, frame, next_instr, stop_tracing ? _DEOPT : 0); if (full) { LEAVE_TRACING(); diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index e562f337a00..791df8a9750 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -11387,9 +11387,14 @@ next_instr = this_instr; frame->instr_ptr = prev_instr; opcode = next_instr->op.code; - bool stop_tracing = (opcode == WITH_EXCEPT_START || - opcode == RERAISE || opcode == CLEANUP_THROW || - opcode == PUSH_EXC_INFO || opcode == INTERPRETER_EXIT); + bool stop_tracing = ( + opcode == WITH_EXCEPT_START || + opcode == RERAISE || + opcode == CLEANUP_THROW || + opcode == PUSH_EXC_INFO || + opcode == INTERPRETER_EXIT || + (opcode >= MIN_INSTRUMENTED_OPCODE && opcode != ENTER_EXECUTOR) + ); _PyFrame_SetStackPointer(frame, stack_pointer); int full = !_PyJit_translate_single_bytecode_to_trace(tstate, frame, next_instr, stop_tracing ? _DEOPT : 0); stack_pointer = _PyFrame_GetStackPointer(frame);