summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/c-api/weakref.rst6
-rw-r--r--Modules/_testcapimodule.c2
-rw-r--r--Objects/weakrefobject.c2
3 files changed, 6 insertions, 4 deletions
diff --git a/Doc/c-api/weakref.rst b/Doc/c-api/weakref.rst
index 04781f7..038f54a 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 2baf453..50eaff9 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 bac3e79..e956372 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);
}