mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
[3.13] gh-117657: Enable test_opcache under TSAN (GH-129831) (GH-130597)
Fix a few thread-safety bugs to enable test_opcache when run with TSAN:
* Use relaxed atomics when clearing `ht->_spec_cache.getitem`
(gh-115999)
* Add temporary suppression for type slot modifications (gh-127266)
* Use atomic load when reading `*dictptr`
(cherry picked from commit f151d27159
)
This commit is contained in:
parent
43a2a372ba
commit
9966daee60
4 changed files with 9 additions and 3 deletions
|
@ -13,6 +13,7 @@ TSAN_TESTS = [
|
|||
'test_importlib',
|
||||
'test_io',
|
||||
'test_logging',
|
||||
'test_opcache',
|
||||
'test_queue',
|
||||
'test_signal',
|
||||
'test_socket',
|
||||
|
|
|
@ -1584,7 +1584,7 @@ _PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method)
|
|||
else {
|
||||
PyObject **dictptr = _PyObject_ComputedDictPointer(obj);
|
||||
if (dictptr != NULL) {
|
||||
dict = *dictptr;
|
||||
dict = FT_ATOMIC_LOAD_PTR_ACQUIRE(*dictptr);
|
||||
}
|
||||
else {
|
||||
dict = NULL;
|
||||
|
|
|
@ -1043,7 +1043,8 @@ type_modified_unlocked(PyTypeObject *type)
|
|||
if (PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE)) {
|
||||
// This field *must* be invalidated if the type is modified (see the
|
||||
// comment on struct _specialization_cache):
|
||||
((PyHeapTypeObject *)type)->_spec_cache.getitem = NULL;
|
||||
FT_ATOMIC_STORE_PTR_RELAXED(
|
||||
((PyHeapTypeObject *)type)->_spec_cache.getitem, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1119,7 +1120,8 @@ type_mro_modified(PyTypeObject *type, PyObject *bases) {
|
|||
if (PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE)) {
|
||||
// This field *must* be invalidated if the type is modified (see the
|
||||
// comment on struct _specialization_cache):
|
||||
((PyHeapTypeObject *)type)->_spec_cache.getitem = NULL;
|
||||
FT_ATOMIC_STORE_PTR_RELAXED(
|
||||
((PyHeapTypeObject *)type)->_spec_cache.getitem, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -47,5 +47,8 @@ race_top:PyThreadState_Clear
|
|||
# Only seen on macOS, sample: https://gist.github.com/aisk/dda53f5d494a4556c35dde1fce03259c
|
||||
race_top:set_default_allocator_unlocked
|
||||
|
||||
# gh-127266: type slot updates are not thread-safe (test_opcache.test_load_attr_method_lazy_dict)
|
||||
race_top:update_one_slot
|
||||
|
||||
# https://gist.github.com/mpage/6962e8870606cfc960e159b407a0cb40
|
||||
thread:pthread_create
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue