Yury Selivanov schrieb am 16.05.2016 um 22:19:
> 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?

It seems that CPython should suffer from the same problem, though. It uses
the same code in the getter.

Also, should we really return an empty string or None? Both feel like
unexpected results, so I can't tell which is better.

And finally, since both name values are guaranteed to be strings (the
setter checks their type), I wonder if we shouldn't just make sure they are
*exactly* Unicode strings by converting any subtypes, and then remove their
Py_CLEAR() from the tp_clear() function. Strings can't participate in
reference cycles, and we could thus report the actual names even during
garbage collection.

Stefan

_______________________________________________
cython-devel mailing list
cython-devel@python.org
https://mail.python.org/mailman/listinfo/cython-devel

Reply via email to