On 2016-05-16 3:58 AM, Stefan Behnel wrote:
Yury Selivanov schrieb am 14.05.2016 um 23:31:Under some circumstances, in asyncio code that runs in uvloop [1], cython code segfaults in cython/Cython/Utility/Coroutine.c: static PyObject * __Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self) { Py_INCREF(self->gi_qualname); return self->gi_qualname; } "self->gi_qualname" can be NULL. The correct code is probably: __Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self) { if (self->gi_qualname == NULL) { return __pyx_empty_unicode; } Py_INCREF(self->gi_qualname); return self->gi_qualname; }I wonder why it can be NULL. It's supposed to be set to a string constant at creation time. See GeneratorDefNode in Nodes.py. Is there anything special you are doing with these objects? Could you try to figure out how the ones that have a NULL value here are created?
It's probably because asyncio Future and Task have __del__ methods which (may) try to call repr on coroutines. At that point of time, maybe the GC breaks the refs. Would you be able to fix the refs for qualname/name? Yury _______________________________________________ cython-devel mailing list [email protected] https://mail.python.org/mailman/listinfo/cython-devel
