cpython
cpython copied to clipboard
`_PyWeakref_ClearRef` and `_PyWeakref_ClearWeakRefsExceptCallbacks` should be exposed in 3.13
_PyWeakref_ClearRef
was previously exposed in the public C-API. In 3.13, it was moved to pycore_weakref.h
and the symbol is not exposed (i.e., it's extern void
instead of PyAPI_FUNC(void)
.
_PyWeakref_ClearRef
is used to clear a single weakref without calling its callback. _PyWeakref_ClearWeakRefsExceptCallbacks
is the thread-safe version. If people are using _PyWeakref_ClearRef
, we'd rather they use _PyWeakref_ClearWeakRefsExceptCallbacks
so that the code is thread-safe in the free-threading build.
One use case is to clear newly added weakrefs after you've called a finalizer, in case your C type does not delegate to subtype_dealloc.
Uses:
At a minimum, we should add PyAPI_FUNC
to _PyWeakref_ClearRef
and _PyWeakref_ClearWeakRefsExceptCallbacks
and consider making _PyWeakref_ClearWeakRefsExceptCallbacks
part of the public C API.
Linked PRs
- gh-118797
- gh-118807
- gh-118903