Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions Doc/c-api/weakref.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion Modules/_testcapimodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
6 changes: 5 additions & 1 deletion Objects/weakrefobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -913,7 +913,11 @@ PyWeakref_GetRef(PyObject *ref, PyObject **pobj)
return -1;
}
*pobj = _PyWeakref_GET_REF(ref);
return 0;
if (*pobj == NULL) {
// The reference is dead
return 0;
}
return 1;
Comment thread
vstinner marked this conversation as resolved.
Resolved
}


Expand Down