Author vstinner
Recipients pablogsal, vstinner
Date 2020-06-19.14:05:00
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1592575501.27.0.818244173351.issue41036@roundup.psfhosted.org>
In-reply-to
Content
While reviewing changes of bpo-40077 "Convert static types to PyType_FromSpec()", I noticed that some static types don't implement tp_traverse.

The doc says:

    Heap-allocated types (...) hold a reference to their type. Their traversal function must therefore either visit Py_TYPE(self), or delegate this responsibility by calling tp_traverse of another heap-allocated type (such as a heap-allocated superclass). If they do not, the type object may not be garbage-collected.

https://docs.python.org/dev/c-api/typeobj.html#c.PyTypeObject.tp_traverse

Porting to 3.9 says:

    for types that have a custom tp_traverse function, ensure that all custom tp_traverse functions of heap-allocated types visit the object’s type

https://docs.python.org/dev/whatsnew/3.9.html#changes-in-the-c-api

--

It seems like converting a static type to a heap allocated type requires to *add* a new tp_traverse function, if it wasn't the case.

Maybe we can provide a base tp_traverse implementation in the base object type: visit the type if it's a heap type?

See attached PR.

See bpo-35810 and bpo-40217 for more information.
History
Date User Action Args
2020-06-19 14:05:01vstinnersetrecipients: + vstinner, pablogsal
2020-06-19 14:05:01vstinnersetmessageid: <1592575501.27.0.818244173351.issue41036@roundup.psfhosted.org>
2020-06-19 14:05:01vstinnerlinkissue41036 messages
2020-06-19 14:05:00vstinnercreate