gh-117657: Fix race data race in _Py_IsOwnedByCurrentThread()
#118258
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.
We need to load
ob_tid
atomically; it may be set to zero in another thread without any intervening operations that establish a happens-before relationship.Using a relaxed load should be sufficient; we do not depend on the store publishing any other information.
Examples:
The load in
_Py_IsOwnedByCurrentThread()
:cpython/Include/object.h
Line 306 in 4b10e20
races with the store in
_Py_ExplicitMergeRefcount()
(example):cpython/Objects/object.c
Line 421 in 4b10e20
and the store in
_Py_MergeZeroLocalRefcount()
(example):cpython/Objects/object.c
Line 378 in 4b10e20