New submission from martenjan: The code for gc_list_merge is given in gcmodule.c. I retrieved it from http://hg.python.org/cpython/file/tip/Modules/gcmodule.c#l287
The code seems to merge list `from` incompletely: the first entry of `from` is omitted in the merged list. The issue is in line 295: tail->gc.gc_next = from->gc.gc_next; I fixed it as : tail->gc.gc_next = from; Please check if my analysis is correct. See below for the context. Original: lines 287 to 301 /* append list `from` onto list `to`; `from` becomes an empty list */ static void gc_list_merge(PyGC_Head *from, PyGC_Head *to) { PyGC_Head *tail; assert(from != to); if (!gc_list_is_empty(from)) { tail = to->gc.gc_prev; tail->gc.gc_next = from->gc.gc_next; tail->gc.gc_next->gc.gc_prev = tail; to->gc.gc_prev = from->gc.gc_prev; to->gc.gc_prev->gc.gc_next = to; } gc_list_init(from); } Fix: /* append list `from` onto list `to`; `from` becomes an empty list */ static void gc_list_merge(PyGC_Head *from, PyGC_Head *to) { PyGC_Head *tail; assert(from != to); if (!gc_list_is_empty(from)) { tail = to->gc.gc_prev; tail->gc.gc_next = from; tail->gc.gc_next->gc.gc_prev = tail; to->gc.gc_prev = from->gc.gc_prev; to->gc.gc_prev->gc.gc_next = to; } gc_list_init(from); } ---------- components: Interpreter Core messages: 202206 nosy: martenjan priority: normal severity: normal status: open title: does gc_list_merge merge properly? type: behavior versions: Python 2.7 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue19503> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com