Skip to content

Commit 3067c62

Browse files
[3.13] gh-117657: Make PyType_HasFeature atomic (GH-120210) (#120443)
gh-117657: Make PyType_HasFeature atomic (GH-120210) Make PyType_HasFeature atomic (cherry picked from commit eebae2c) Co-authored-by: Ken Jin <[email protected]>
1 parent b1ebbb5 commit 3067c62

File tree

3 files changed

+4
-2
lines changed

3 files changed

+4
-2
lines changed

Include/internal/pycore_object.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ extern int _PyTraceMalloc_TraceRef(PyObject *op, PyRefTracerEvent event, void*);
262262
// Fast inlined version of PyType_HasFeature()
263263
static inline int
264264
_PyType_HasFeature(PyTypeObject *type, unsigned long feature) {
265-
return ((type->tp_flags & feature) != 0);
265+
return ((FT_ATOMIC_LOAD_ULONG_RELAXED(type->tp_flags) & feature) != 0);
266266
}
267267

268268
extern void _PyType_InitCache(PyInterpreterState *interp);

Include/internal/pycore_pyatomic_ft_wrappers.h

+3
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ extern "C" {
4545
_Py_atomic_load_uint16_relaxed(&value)
4646
#define FT_ATOMIC_LOAD_UINT32_RELAXED(value) \
4747
_Py_atomic_load_uint32_relaxed(&value)
48+
#define FT_ATOMIC_LOAD_ULONG_RELAXED(value) \
49+
_Py_atomic_load_ulong_relaxed(&value)
4850
#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) \
4951
_Py_atomic_store_ptr_relaxed(&value, new_value)
5052
#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) \
@@ -75,6 +77,7 @@ extern "C" {
7577
#define FT_ATOMIC_LOAD_UINT8_RELAXED(value) value
7678
#define FT_ATOMIC_LOAD_UINT16_RELAXED(value) value
7779
#define FT_ATOMIC_LOAD_UINT32_RELAXED(value) value
80+
#define FT_ATOMIC_LOAD_ULONG_RELAXED(value) value
7881
#define FT_ATOMIC_STORE_PTR_RELAXED(value, new_value) value = new_value
7982
#define FT_ATOMIC_STORE_PTR_RELEASE(value, new_value) value = new_value
8083
#define FT_ATOMIC_STORE_UINTPTR_RELEASE(value, new_value) value = new_value

Tools/tsan/suppressions_free_threading.txt

-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ race:free_threadstate
2626
race_top:_add_to_weak_set
2727
race_top:_in_weak_set
2828
race_top:_PyEval_EvalFrameDefault
29-
race_top:_PyType_HasFeature
3029
race_top:assign_version_tag
3130
race_top:insertdict
3231
race_top:lookup_tp_dict

0 commit comments

Comments
 (0)