diff options
author | Donghee Na <donghee.na@python.org> | 2024-04-18 21:40:28 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-18 21:40:28 (GMT) |
commit | 710c01be94ca7b2c96407f41f0e37e24701008b4 (patch) | |
tree | 58444795a7defcf963270552cb91b154aa2a68e2 | |
parent | 8f25cc992021d6ffc62bb110545b97a92f7cb295 (diff) | |
download | cpython-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.h | 4 | ||||
-rw-r--r-- | Objects/setobject.c | 1 |
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) { |