Skip to content

Commit eebae2c

Browse files
gh-117657: Make PyType_HasFeature atomic (GH-120210)
Make PyType_HasFeature atomic
1 parent 030b452 commit eebae2c

File tree

3 files changed

+4
-2
lines changed

3 files changed

+4
-2
lines changed

Include/internal/pycore_object.h

Lines changed: 1 addition & 1 deletion
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

Lines changed: 3 additions & 0 deletions
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

Lines changed: 0 additions & 1 deletion
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)