Skip to content

Conversation

@vstinner
Copy link
Member

@vstinner vstinner commented Jan 22, 2022

Type recurse_down_subclasses() now calls _PyType_GetSubclasses() to
iterate on a copy of subclasses, because its loop can modify
subclasses: hold strong references to subclasses.

  • remove_subclass() now sets tp_subclasses to NULL if the dictionary
    becomes empty.
  • _PyType_GetSubclasses() no longer holds a reference to
    tp_subclasses: its loop cannot modify tp_subclasses.
  • remove_all_subclasses() no longer ignores objects which are not
    types: tp_bases must only contain types. Use _PyType_CAST() to
    ensure that the object is a type in debug mode.
  • mro_hierarchy() avoids _PyType_GetSubclasses() if tp_subclasses is
    NULL.

https://bugs.python.org/issue46417

Type recurse_down_subclasses() now calls _PyType_GetSubclasses() to
iterate on a copy of subclasses, because its loop can modify
subclasses: hold strong references to subclasses.

* remove_subclass() now sets tp_subclasses to NULL if the dictionary
  becomes empty.
* _PyType_GetSubclasses() no longer holds a reference to
  tp_subclasses: its loop cannot modify tp_subclasses.
* remove_all_subclasses() no longer ignores objects which are not
  types: tp_bases must only contain types. Use _PyType_CAST() to
  ensure that the object is a type in debug mode.
* mro_hierarchy() avoids _PyType_GetSubclasses() if tp_subclasses is
  NULL.
@vstinner vstinner requested a review from markshannon as a code owner January 22, 2022 01:19
@vstinner vstinner marked this pull request as draft January 22, 2022 02:25
@vstinner vstinner added the 🔨 test-with-buildbots Test PR w/ buildbots; report in status section label Jan 22, 2022
@bedevere-bot
Copy link

🤖 New build scheduled with the buildbot fleet by @vstinner for commit ebcb71b 🤖

If you want to schedule another build, you need to add the ":hammer: test-with-buildbots" label again.

@bedevere-bot bedevere-bot removed the 🔨 test-with-buildbots Test PR w/ buildbots; report in status section label Jan 22, 2022
@vstinner
Copy link
Member Author

I wrote a real fix #30793 I will write a new cleanup PR on top on this fix PR.

@vstinner vstinner closed this Jan 22, 2022
@vstinner vstinner deleted the tp_subclasses branch January 22, 2022 15:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants