Brandt Bucher <[email protected]> added the comment:
It looks like the GC untracks the None-filled result tuple in untrack_tuples,
and it's never re-tracked again. This can also happen if it's filled with
atomic values on an early iteration and the GC visits it.
Perhaps a simple fix is to call _PyObject_GC_TRACK on the result tuple inside
of each zip_next call if it's not tracked anymore?
if (!_PyObject_GC_IS_TRACKED(result)) {
_PyObject_GC_TRACK(result);
}
_PyTuple_MaybeUntrack(result); // Worth it?
return result;
Although I'm not sure how much of a win we're getting from the result tuple
reuse here - maybe it's easier to just not do that.
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue42536>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com