[Python-checkins] gh-105927: PyWeakref_GetRef() returns 1 on success (#106561)

vstinner webhook-mailer at python.org
Sun Jul 9 11:50:29 EDT 2023


https://github.com/python/cpython/commit/ee46cb6aa959d891b0a480fea29f1eb991e0fad8
commit: ee46cb6aa959d891b0a480fea29f1eb991e0fad8
branch: main
author: Victor Stinner <vstinner at python.org>
committer: vstinner <vstinner at python.org>
date: 2023-07-09T15:50:26Z
summary:

gh-105927: PyWeakref_GetRef() returns 1 on success (#106561)

PyWeakref_GetRef() now returns 1 on success, and return 0 if the
reference is dead.

Co-authored-by: Serhiy Storchaka <storchaka at gmail.com>

files:
M Doc/c-api/weakref.rst
M Modules/_testcapimodule.c
M Objects/weakrefobject.c

diff --git a/Doc/c-api/weakref.rst b/Doc/c-api/weakref.rst
index 04781f78d2346..038f54a9751fd 100644
--- a/Doc/c-api/weakref.rst
+++ b/Doc/c-api/weakref.rst
@@ -55,9 +55,11 @@ as much as it can.
 
    Get a :term:`strong reference` to the referenced object from a weak
    reference, *ref*, into *\*pobj*.
-   Return 0 on success. Raise an exception and return -1 on error.
 
-   If the referent is no longer live, set *\*pobj* to ``NULL`` and return 0.
+   * On success, set *\*pobj* to a new :term:`strong reference` to the
+     referenced object and return 1.
+   * If the reference is dead, set *\*pobj* to ``NULL`` and return 0.
+   * On error, raise an exception and return -1.
 
    .. versionadded:: 3.13
 
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index 2baf453f71026..50eaff9917fd1 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -3376,7 +3376,7 @@ test_weakref_capi(PyObject *Py_UNUSED(module), PyObject *Py_UNUSED(args))
 
     // test PyWeakref_GetRef(), reference is alive
     PyObject *ref = Py_True;  // marker to check that value was set
-    assert(PyWeakref_GetRef(weakref, &ref) == 0);
+    assert(PyWeakref_GetRef(weakref, &ref) == 1);
     assert(ref == obj);
     assert(Py_REFCNT(obj) == (refcnt + 1));
     Py_DECREF(ref);
diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c
index bac3e79bb7c25..e9563729bf82b 100644
--- a/Objects/weakrefobject.c
+++ b/Objects/weakrefobject.c
@@ -913,7 +913,7 @@ PyWeakref_GetRef(PyObject *ref, PyObject **pobj)
         return -1;
     }
     *pobj = _PyWeakref_GET_REF(ref);
-    return 0;
+    return (*pobj != NULL);
 }
 
 



More information about the Python-checkins mailing list