]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-117657: Make PyType_HasFeature atomic (GH-120210)
authorKen Jin <kenjin@python.org>
Thu, 13 Jun 2024 09:29:19 +0000 (17:29 +0800)
committerGitHub <noreply@github.com>
Thu, 13 Jun 2024 09:29:19 +0000 (17:29 +0800)
Make PyType_HasFeature atomic

Include/internal/pycore_object.h
Include/internal/pycore_pyatomic_ft_wrappers.h
Tools/tsan/suppressions_free_threading.txt

index 6f133014ce06e29b43931f0b1b30cd8075d492f4..d1e2773a2473b07bb5ceffaabad5470a0d3f4f04 100644 (file)
@@ -262,7 +262,7 @@ extern int _PyTraceMalloc_TraceRef(PyObject *op, PyRefTracerEvent event, void*);
 // Fast inlined version of PyType_HasFeature()
 static inline int
 _PyType_HasFeature(PyTypeObject *type, unsigned long feature) {
-    return ((type->tp_flags & feature) != 0);
+    return ((FT_ATOMIC_LOAD_ULONG_RELAXED(type->tp_flags) & feature) != 0);
 }
 
 extern void _PyType_InitCache(PyInterpreterState *interp);
index bc6aba56cf9fc7bdfaacf7848004bcb4acc981b9..a1bb383bcd22e95a5b49d02ab625cbcc4e2048e1 100644 (file)
@@ -45,6 +45,8 @@ extern "C" {
     _Py_atomic_load_uint16_relaxed(&value)
 #define FT_ATOMIC_LOAD_UINT32_RELAXED(value) \
     _Py_atomic_load_uint32_relaxed(&value)
+#define FT_ATOMIC_LOAD_ULONG_RELAXED(value) \
+    _Py_atomic_load_ulong_relaxed(&value)
 #define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) \
     _Py_atomic_store_ptr_relaxed(&value, new_value)
 #define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) \
@@ -75,6 +77,7 @@ extern "C" {
 #define FT_ATOMIC_LOAD_UINT8_RELAXED(value) value
 #define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
 #define FT_ATOMIC_LOAD_UINT32_RELAXED(value) value
+#define FT_ATOMIC_LOAD_ULONG_RELAXED(value) value
 #define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
 #define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
 #define FT_ATOMIC_STORE_UINTPTR_RELEASE(value, new_value) value = new_value
index b10b297f50da811141fe2502bb63c1d4ff233dad..05ceaf438b63537395a50d8f19589815398b406e 100644 (file)
@@ -26,7 +26,6 @@ race:free_threadstate
 race_top:_add_to_weak_set
 race_top:_in_weak_set
 race_top:_PyEval_EvalFrameDefault
-race_top:_PyType_HasFeature
 race_top:assign_version_tag
 race_top:insertdict
 race_top:lookup_tp_dict