bpo-35983: skip trashcan for subclasses (GH-11841)
Add new trashcan macros to deal with a double deallocation that could occur when the `tp_dealloc` of a subclass calls the `tp_dealloc` of a base class and that base class uses the trashcan mechanism.
Patch by Jeroen Demeyer.
diff --git a/Python/traceback.c b/Python/traceback.c
index bd1061e..18bd0bf 100644
--- a/Python/traceback.c
+++ b/Python/traceback.c
@@ -163,11 +163,11 @@
tb_dealloc(PyTracebackObject *tb)
{
PyObject_GC_UnTrack(tb);
- Py_TRASHCAN_SAFE_BEGIN(tb)
+ Py_TRASHCAN_BEGIN(tb, tb_dealloc)
Py_XDECREF(tb->tb_next);
Py_XDECREF(tb->tb_frame);
PyObject_GC_Del(tb);
- Py_TRASHCAN_SAFE_END(tb)
+ Py_TRASHCAN_END
}
static int