Julien Palard added the comment:

Segfault occur in Include/object.h line 1054:

#define Py_TRASHCAN_SAFE_BEGIN(op) \
    do { \
        PyThreadState *_tstate = PyThreadState_GET(); \
        if (_tstate->trash_delete_nesting < PyTrash_UNWIND_LEVEL) { \
            ⧺_tstate->trash_delete_nesting;
            /* The body of the deallocator is here. */

the _tstate is null at this moment.

It's NULL because in the main, right before the 
_Py_ReleaseInternedUnicodeStrings there's a call to Py_FinalizeEx which calls 
PyThreadState_Swap(NULL), see pylifecycle.c:1097:

    /* Delete current thread. After this, many C API calls become crashy. */
    PyThreadState_Swap(∅);

But there's probably still references to strings before the Py_FinalizeEx so it 
does not make sense to garbage collect before it.

Maybe make Py_TRASHCAN_SAFE_BEGIN more robust by disabling the counter when the 
state is NULL?

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue31200>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to