[issue35983] tp_dealloc trashcan shouldn't be called for subclasses

Jeroen Demeyer report at bugs.python.org
Wed Feb 13 06:02:31 EST 2019


New submission from Jeroen Demeyer <J.Demeyer at UGent.be>:

When designing an extension type subclassing an existing type, it makes sense to call the tp_dealloc of the base class from the tp_dealloc of the subclass.

Now suppose that I'm subclassing "list" which uses the trashcan mechanism. Then it can happen that the tp_dealloc of list puts this object in the trashcan, even though the tp_dealloc of the subclass has already been called. Then the tp_dealloc of the subclass may be called multiple times, which is unsafe (tp_dealloc is expected to be called exactly once).

To solve this, the trashcan mechanism should be disabled when tp_dealloc is called from a subclass.

Interestingly, subtype_dealloc also solves this in a much more involved way (see the "Q. Why the bizarre (net-zero) manipulation of _PyRuntime.trash_delete_nesting around the trashcan macros?") in 
Objects/typeobject.c

----------
components: Interpreter Core
messages: 335405
nosy: jdemeyer, pitrou, scoder
priority: normal
severity: normal
status: open
title: tp_dealloc trashcan shouldn't be called for subclasses
versions: Python 2.7, Python 3.7, Python 3.8

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue35983>
_______________________________________


More information about the Python-bugs-list mailing list