New submission from Jeroen Demeyer <j.deme...@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 <rep...@bugs.python.org>
<https://bugs.python.org/issue35983>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to