]> git.ipfire.org Git - thirdparty/Python/cpython.git/commit
gh-115832: Fix instrumentation version mismatch during interpreter shutdown (#115856)
authorBrett Simmers <swtaarrs@users.noreply.github.com>
Mon, 4 Mar 2024 16:29:39 +0000 (08:29 -0800)
committerGitHub <noreply@github.com>
Mon, 4 Mar 2024 16:29:39 +0000 (11:29 -0500)
commit0adfa8482d369899e9963206a3307f423309e10c
treec1f71c0f65b0f01581d37eafa55c26b769915299
parent15dc2979bc1b24269177f0e150495abb7f3eb546
gh-115832: Fix instrumentation version mismatch during interpreter shutdown (#115856)

A previous commit introduced a bug to `interpreter_clear()`: it set
`interp->ceval.instrumentation_version` to 0, without making the corresponding
change to `tstate->eval_breaker` (which holds a thread-local copy of the
version). After this happens, Python code can still run due to object finalizers
during a GC, and the version check in bytecodes.c will see a different result
than the one in instrumentation.c causing an infinite loop.

The fix itself is straightforward: clear `tstate->eval_breaker` when clearing
`interp->ceval.instrumentation_version`.
Lib/test/_test_monitoring_shutdown.py [new file with mode: 0644]
Lib/test/test_monitoring.py
Python/instrumentation.c
Python/pystate.c