Skip to content

[WIP] bpo-1635741: Py_Finalize() finalizes builtin static types - #20763

Closed
vstinner wants to merge 1 commit into
python:masterfrom
vstinner:pystatictype_fini
Closed

[WIP] bpo-1635741: Py_Finalize() finalizes builtin static types#20763
vstinner wants to merge 1 commit into
python:masterfrom
vstinner:pystatictype_fini

Conversation

@vstinner

@vstinner vstinner commented Jun 9, 2020

Copy link
Copy Markdown
Member

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().

https://bugs.python.org/issue1635741

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().
@vstinner

vstinner commented Jun 9, 2020

Copy link
Copy Markdown
Member Author

I only published this PR to show what I attempted to do, but it doesn't work: https://bugs.python.org/issue1635741#msg371119

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment