gh-117657: Fix data races in the method cache in free-threaded builds #117954
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
These are technically data races, but I think they're benign (to the extent that that is actually possible). We update cache entries non-atomically:
cpython/Objects/typeobject.c
Lines 4974 to 4984 in a23fa33
but read them atomically from another thread:
cpython/Objects/typeobject.c
Lines 5046 to 5051 in a23fa33
and there's nothing that establishes a happens-before relationship between the reads and writes that I can see.
In practice I don't think this matters much. We care about always reading the entire entry atomically, and the sequence lock enforces that.
Sample races reported by TSAN: