mirror of https://github.com/python/cpython
gh-117657: Fix data races report by TSAN unicode-hash (gh-119907)
This commit is contained in:
parent
117a8acdab
commit
0594a27e5f
|
@ -1633,7 +1633,7 @@ unicode_modifiable(PyObject *unicode)
|
||||||
assert(_PyUnicode_CHECK(unicode));
|
assert(_PyUnicode_CHECK(unicode));
|
||||||
if (Py_REFCNT(unicode) != 1)
|
if (Py_REFCNT(unicode) != 1)
|
||||||
return 0;
|
return 0;
|
||||||
if (_PyUnicode_HASH(unicode) != -1)
|
if (FT_ATOMIC_LOAD_SSIZE_RELAXED(_PyUnicode_HASH(unicode)) != -1)
|
||||||
return 0;
|
return 0;
|
||||||
if (PyUnicode_CHECK_INTERNED(unicode))
|
if (PyUnicode_CHECK_INTERNED(unicode))
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -10901,9 +10901,10 @@ _PyUnicode_EqualToASCIIId(PyObject *left, _Py_Identifier *right)
|
||||||
if (PyUnicode_CHECK_INTERNED(left))
|
if (PyUnicode_CHECK_INTERNED(left))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
assert(_PyUnicode_HASH(right_uni) != -1);
|
Py_hash_t right_hash = FT_ATOMIC_LOAD_SSIZE_RELAXED(_PyUnicode_HASH(right_uni));
|
||||||
Py_hash_t hash = _PyUnicode_HASH(left);
|
assert(right_hash != -1);
|
||||||
if (hash != -1 && hash != _PyUnicode_HASH(right_uni)) {
|
Py_hash_t hash = FT_ATOMIC_LOAD_SSIZE_RELAXED(_PyUnicode_HASH(left));
|
||||||
|
if (hash != -1 && hash != right_hash) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11388,12 +11389,14 @@ unicode_hash(PyObject *self)
|
||||||
#ifdef Py_DEBUG
|
#ifdef Py_DEBUG
|
||||||
assert(_Py_HashSecret_Initialized);
|
assert(_Py_HashSecret_Initialized);
|
||||||
#endif
|
#endif
|
||||||
if (_PyUnicode_HASH(self) != -1)
|
Py_hash_t hash = FT_ATOMIC_LOAD_SSIZE_RELAXED(_PyUnicode_HASH(self));
|
||||||
return _PyUnicode_HASH(self);
|
if (hash != -1) {
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
x = _Py_HashBytes(PyUnicode_DATA(self),
|
x = _Py_HashBytes(PyUnicode_DATA(self),
|
||||||
PyUnicode_GET_LENGTH(self) * PyUnicode_KIND(self));
|
PyUnicode_GET_LENGTH(self) * PyUnicode_KIND(self));
|
||||||
_PyUnicode_HASH(self) = x;
|
|
||||||
|
FT_ATOMIC_STORE_SSIZE_RELAXED(_PyUnicode_HASH(self), x);
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,6 @@ race_top:set_discard_entry
|
||||||
race_top:set_inheritable
|
race_top:set_inheritable
|
||||||
race_top:start_the_world
|
race_top:start_the_world
|
||||||
race_top:tstate_set_detached
|
race_top:tstate_set_detached
|
||||||
race_top:unicode_hash
|
|
||||||
race_top:Py_SET_TYPE
|
race_top:Py_SET_TYPE
|
||||||
race_top:_PyDict_CheckConsistency
|
race_top:_PyDict_CheckConsistency
|
||||||
race_top:_PyImport_AcquireLock
|
race_top:_PyImport_AcquireLock
|
||||||
|
|
Loading…
Reference in New Issue