[WIP] bpo-1635741: Py_Finalize() finalizes builtin static types by vstinner · Pull Request #20763 · python/cpython
Clear the following PyTypeObject members of builtin static types in
Py_Finalize():
* tp_bases
* tp_cache
* tp_dict
* tp_mro
* tp_subclasses
Finalize static types initialized by _PyStaticTypes_Init() and
builtin exceptions initialized by _PyExc_Init().
Once a static type is finalized, it must no longer be used.
Use assert(!_PyStaticType_IsFinalized(type)); to ensure that static
type is not finalized.
With this change, Valgrind log:
possibly lost: 612,326 bytes in 5,503 blocks
becomes:
possibly lost: 369,346 bytes in 2,805 blocks"
Changes:
* Rename _PyTypes_Init() to _PyStaticTypes_Init().
* Move _PyExc_Fini() call inside finalize_interp_types().