Skip to content

[3.14] gh-159739: Hold the codec registry lock while unregistering (GH-160168) - #160485

Merged
JelleZijlstra merged 1 commit into
python:3.14from
jelle-openai:jelle/codex/backport-160168-3.14
Oct 24, 2026
Merged

JelleZijlstra merged 1 commit into
python:3.14from
jelle-openai:jelle/codex/backport-160168-3.14

Conversation

@jelle-openai

@jelle-openai jelle-openai commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Concurrent calls to codecs.unregister() can shrink the search path between its length check and indexed lookup in a free-threaded build. The lookup then returns NULL and an unconditional decref crashes the interpreter; hold the registry mutex across the scan and removal. Also reported in gh-157078. Backport to 3.15 and 3.14.
(cherry picked from commit 784b305)

Co-authored-by: Jelle Zijlstra jelle@openai.com

Backport of #160168 to 3.14.

Hold 3.14's codec search-path mutex across the length check, lookup, and removal. Release it before dropping the temporary reference.

Ran test_codecs on a free-threaded 3.14 build. Eight threads completed 102,400 register/unregister pairs with the GIL disabled.

…ing (pythonGH-160168)

Concurrent calls to codecs.unregister() can shrink the search path between its length check and indexed lookup in a free-threaded build. The lookup then returns NULL and an unconditional decref crashes the interpreter; hold the registry mutex across the scan and removal. Also reported in pythongh-157078. Backport to 3.15 and 3.14.
(cherry picked from commit 784b305)

Co-authored-by: Jelle Zijlstra <jelle@openai.com>
@JelleZijlstra
JelleZijlstra marked this pull request as ready for review October 23, 2026 20:35
@JelleZijlstra
JelleZijlstra enabled auto-merge (squash) October 24, 2026 20:43
@JelleZijlstra
JelleZijlstra merged commit 72caed7 into python:3.14 Oct 24, 2026
51 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants