mirror of https://github.com/python/cpython
gh-117657: Quiet erroneous TSAN reports of data races in `_PySeqLock` (#117955)
Quiet erroneous TSAN reports of data races in `_PySeqLock` TSAN reports a couple of data races between the compare/exchange in `_PySeqLock_LockWrite` and the non-atomic loads in `_PySeqLock_{Abandon,Unlock}Write`. This is another instance of TSAN incorrectly modeling failed compare/exchange as a write instead of a load.
This commit is contained in:
parent
b6c62c79e7
commit
0d29302155
|
@ -472,7 +472,7 @@ _PyRWMutex_Unlock(_PyRWMutex *rwmutex)
|
|||
|
||||
void _PySeqLock_LockWrite(_PySeqLock *seqlock)
|
||||
{
|
||||
// lock the entry by setting by moving to an odd sequence number
|
||||
// lock by moving to an odd sequence number
|
||||
uint32_t prev = _Py_atomic_load_uint32_relaxed(&seqlock->sequence);
|
||||
while (1) {
|
||||
if (SEQLOCK_IS_UPDATING(prev)) {
|
||||
|
@ -492,14 +492,14 @@ void _PySeqLock_LockWrite(_PySeqLock *seqlock)
|
|||
|
||||
void _PySeqLock_AbandonWrite(_PySeqLock *seqlock)
|
||||
{
|
||||
uint32_t new_seq = seqlock->sequence - 1;
|
||||
uint32_t new_seq = _Py_atomic_load_uint32_relaxed(&seqlock->sequence) - 1;
|
||||
assert(!SEQLOCK_IS_UPDATING(new_seq));
|
||||
_Py_atomic_store_uint32(&seqlock->sequence, new_seq);
|
||||
}
|
||||
|
||||
void _PySeqLock_UnlockWrite(_PySeqLock *seqlock)
|
||||
{
|
||||
uint32_t new_seq = seqlock->sequence + 1;
|
||||
uint32_t new_seq = _Py_atomic_load_uint32_relaxed(&seqlock->sequence) + 1;
|
||||
assert(!SEQLOCK_IS_UPDATING(new_seq));
|
||||
_Py_atomic_store_uint32(&seqlock->sequence, new_seq);
|
||||
}
|
||||
|
|
|
@ -26,7 +26,6 @@ race:_PyObject_GC_IS_SHARED
|
|||
race:_PyObject_GC_SET_SHARED
|
||||
race:_PyObject_GC_TRACK
|
||||
race:_PyType_HasFeature
|
||||
race:_PyType_Lookup
|
||||
race:assign_version_tag
|
||||
race:compare_unicode_unicode
|
||||
race:delitem_common
|
||||
|
@ -47,4 +46,3 @@ race:set_inheritable
|
|||
race:start_the_world
|
||||
race:tstate_set_detached
|
||||
race:unicode_hash
|
||||
race:update_cache_gil_disabled
|
||||
|
|
Loading…
Reference in New Issue