This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author pv
Recipients docs@python, pv
Date 2017-08-25.14:26:47
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1503671208.32.0.920107204017.issue31276@psf.upfronthosting.co.za>
In-reply-to
Content
It's unclear if PyObject_CallFinalizerFromDealloc is a public function
or not. It is not documented, but it seems there's no other way to
ensure that tp_finalize runs, at least for objects without 
Py_TPFLAGS_HAVE_GC.

In the documentation of tp_finalize (https://docs.python.org/3/c-api/typeobj.html?highlight=tp_finalize#c.PyTypeObject.tp_finalize) 
there is the sentence:

"""It is called either from the garbage collector (if the instance is
part of an isolated reference cycle) or just before the object is 
deallocated."""

However, it appears it is necessary to call it explicitly from any
user-provided tp_dealloc. Indeed, there are several calls to 
PyObject_CallFinalizerFromDealloc in cpython/Modules/* e.g. in
posixmodule.c:ScandirIterator_dealloc
History
Date User Action Args
2017-08-25 14:26:48pvsetrecipients: + pv, docs@python
2017-08-25 14:26:48pvsetmessageid: <1503671208.32.0.920107204017.issue31276@psf.upfronthosting.co.za>
2017-08-25 14:26:48pvlinkissue31276 messages
2017-08-25 14:26:47pvcreate