summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDonghee Na <donghee.na@python.org>2024-04-18 21:40:28 (GMT)
committerGitHub <noreply@github.com>2024-04-18 21:40:28 (GMT)
commit710c01be94ca7b2c96407f41f0e37e24701008b4 (patch)
tree58444795a7defcf963270552cb91b154aa2a68e2
parent8f25cc992021d6ffc62bb110545b97a92f7cb295 (diff)
downloadcpython-710c01be94ca7b2c96407f41f0e37e24701008b4.zip
cpython-710c01be94ca7b2c96407f41f0e37e24701008b4.tar.gz
cpython-710c01be94ca7b2c96407f41f0e37e24701008b4.tar.bz2
gh-112069: Make PySet_GET_SIZE to be atomic safe. (gh-118053)
gh-112069: Make PySet_GET_SIZE to be atomic operation
-rw-r--r--Include/cpython/setobject.h4
-rw-r--r--Objects/setobject.c1
2 files changed, 4 insertions, 1 deletions
diff --git a/Include/cpython/setobject.h b/Include/cpython/setobject.h
index 1778c77..89565cb 100644
--- a/Include/cpython/setobject.h
+++ b/Include/cpython/setobject.h
@@ -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))
diff --git a/Objects/setobject.c b/Objects/setobject.c
index 7af0ae1..d5030ce 100644
--- a/Objects/setobject.c
+++ b/Objects/setobject.c
@@ -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)
{