From: Ken Jin Date: Tue, 23 Dec 2025 11:27:23 +0000 (+0800) Subject: gh-142448: Disable JIT tracing when monitoring is enabled (GH-142842) X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c4ab024530feb3a66d51bcef2e33b309ca0d543f;p=thirdparty%2FPython%2Fcpython.git gh-142448: Disable JIT tracing when monitoring is enabled (GH-142842) --- 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 000000000000..bcc7c1fb12d0 --- /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 da06d53f1445..5c23b2f0cc98 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 e562f337a004..791df8a97504 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);