[issue31200] address sanitizer build fails

Julien Palard report at bugs.python.org
Mon Aug 14 11:28:47 EDT 2017


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 <report at bugs.python.org>
<http://bugs.python.org/issue31200>
_______________________________________


More information about the Python-bugs-list mailing list