Message253151
Using Py_CLEAR() fixes symptoms in this test, but the real issue is that
deallocating code is executed twice for some objects (for every 25th
OrderedDict).
PyDict_Type.tp_dealloc() can deposit an object in the _PyTrash_delete_later
list if trash_delete_nesting exceeds PyTrash_UNWIND_LEVEL. Later Py_TYPE(op)-
>tp_dealloc is called for objects in the _PyTrash_delete_later list. But this
is odict_dealloc that already was called.
One of ways to avoid repeated deallocation is to change the type of the object
before calling PyDict_Type.tp_dealloc(). This looks as a hack, but correct
hack. May be there is more straightforward solution. |
|
Date |
User |
Action |
Args |
2015-10-18 10:39:35 | serhiy.storchaka | set | recipients:
+ serhiy.storchaka, rhettinger, vstinner, eric.snow, martin.panter, nagisa |
2015-10-18 10:39:35 | serhiy.storchaka | link | issue25395 messages |
2015-10-18 10:39:34 | serhiy.storchaka | create | |
|