summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Gross <colesbury@gmail.com>2024-05-10 13:54:18 (GMT)
committerGitHub <noreply@github.com>2024-05-10 13:54:18 (GMT)
commitdb5af7da092409030c9fbe0a3a986bd0ee441b8b (patch)
treefc2a29664a0f5e9f8ac4a3bca3260da20d6dc1d3
parenta895756aec688c049a983199e2d7fb801d6502c8 (diff)
downloadcpython-db5af7da092409030c9fbe0a3a986bd0ee441b8b.zip
cpython-db5af7da092409030c9fbe0a3a986bd0ee441b8b.tar.gz
cpython-db5af7da092409030c9fbe0a3a986bd0ee441b8b.tar.bz2
gh-118789: Restore hidden `_PyWeakref_ClearRef` (#118797)
_PyWeakref_ClearRef was previously exposed in the public C-API, although it begins with an underscore and is not documented. It's used by a few C-API extensions. There is currently no alternative public API that can replace its use. _PyWeakref_ClearWeakRefsExceptCallbacks is the only thread-safe way to use _PyWeakref_ClearRef in the free-threaded build. This exposes the C symbol, but does not make the API public.
-rw-r--r--Include/cpython/weakrefobject.h2
-rw-r--r--Include/internal/pycore_weakref.h2
-rw-r--r--Misc/NEWS.d/next/C API/2024-05-08-20-13-00.gh-issue-118789.m88uUa.rst2
3 files changed, 4 insertions, 2 deletions
diff --git a/Include/cpython/weakrefobject.h b/Include/cpython/weakrefobject.h
index 9a79609..dcca166 100644
--- a/Include/cpython/weakrefobject.h
+++ b/Include/cpython/weakrefobject.h
@@ -40,6 +40,8 @@ struct _PyWeakReference {
#endif
};
+PyAPI_FUNC(void) _PyWeakref_ClearRef(PyWeakReference *self);
+
Py_DEPRECATED(3.13) static inline PyObject* PyWeakref_GET_OBJECT(PyObject *ref_obj)
{
PyWeakReference *ref;
diff --git a/Include/internal/pycore_weakref.h b/Include/internal/pycore_weakref.h
index e057a27..cc6c7ff 100644
--- a/Include/internal/pycore_weakref.h
+++ b/Include/internal/pycore_weakref.h
@@ -111,8 +111,6 @@ extern Py_ssize_t _PyWeakref_GetWeakrefCount(PyObject *obj);
// intact.
extern void _PyWeakref_ClearWeakRefsExceptCallbacks(PyObject *obj);
-extern void _PyWeakref_ClearRef(PyWeakReference *self);
-
PyAPI_FUNC(int) _PyWeakref_IsDead(PyObject *weakref);
#ifdef __cplusplus
diff --git a/Misc/NEWS.d/next/C API/2024-05-08-20-13-00.gh-issue-118789.m88uUa.rst b/Misc/NEWS.d/next/C API/2024-05-08-20-13-00.gh-issue-118789.m88uUa.rst
new file mode 100644
index 0000000..a2acc16
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2024-05-08-20-13-00.gh-issue-118789.m88uUa.rst
@@ -0,0 +1,2 @@
+Restore ``_PyWeakref_ClearRef`` that was previously removed in Python 3.13
+alpha 1.