]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-112069: Make PySet_GET_SIZE to be atomic safe. (gh-118053)
authorDonghee Na <donghee.na@python.org>
Thu, 18 Apr 2024 21:40:28 +0000 (06:40 +0900)
committerGitHub <noreply@github.com>
Thu, 18 Apr 2024 21:40:28 +0000 (06:40 +0900)
gh-112069: Make PySet_GET_SIZE to be atomic operation

Include/cpython/setobject.h
Objects/setobject.c

index 1778c778a05324c21fd49c97eb97c63f290a8099..89565cb29212fc172d82e2b5cf52295dcd3a6184 100644 (file)
@@ -62,6 +62,10 @@ typedef struct {
     (assert(PyAnySet_Check(so)), _Py_CAST(PySetObject*, so))
 
 static inline Py_ssize_t PySet_GET_SIZE(PyObject *so) {
+#ifdef Py_GIL_DISABLED
+    return _Py_atomic_load_ssize_relaxed(&(_PySet_CAST(so)->used));
+#else
     return _PySet_CAST(so)->used;
+#endif
 }
 #define PySet_GET_SIZE(so) PySet_GET_SIZE(_PyObject_CAST(so))
index 7af0ae166f9da3183dad0c8869f8aa0d8272dbe2..d5030cec2d6206936530ceb98a5e355b7d8cae64 100644 (file)
@@ -2080,7 +2080,6 @@ set_issuperset_impl(PySetObject *so, PyObject *other)
     Py_RETURN_TRUE;
 }
 
-// TODO: Make thread-safe in free-threaded builds
 static PyObject *
 set_richcompare(PySetObject *v, PyObject *w, int op)
 {