_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
_PyWeakref_ClearRefwas previously exposed in the public C-API. In 3.13, it was moved topycore_weakref.hand the symbol is not exposed (i.e., it'sextern voidinstead ofPyAPI_FUNC(void)._PyWeakref_ClearRefis used to clear a single weakref without calling its callback._PyWeakref_ClearWeakRefsExceptCallbacksis the thread-safe version. If people are using_PyWeakref_ClearRef, we'd rather they use_PyWeakref_ClearWeakRefsExceptCallbacksso 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_FUNCto_PyWeakref_ClearRefand_PyWeakref_ClearWeakRefsExceptCallbacksand consider making_PyWeakref_ClearWeakRefsExceptCallbackspart of the public C API.Linked PRs
_PyWeakref_ClearRef#118797PyUnstable_Object_ClearWeakRefsNoCallbacks#118807_PyWeakref_ClearRef(GH-118797) #118903PyUnstable_Object_ClearWeakRefsNoCallbacks(GH-118807) #120695