Skip to content

Commit 4d059c9

Browse files
committed
Fix page queue mismatch in mi_heap_page_collect
1 parent 218b6bf commit 4d059c9

1 file changed

Lines changed: 4 additions & 1 deletion

File tree

Objects/mimalloc/heap.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,10 @@ static bool mi_heap_page_collect(mi_heap_t* heap, mi_page_queue_t* pq, mi_page_t
100100
// note: this will free retired pages as well.
101101
bool freed = _PyMem_mi_page_maybe_free(page, pq, collect >= MI_FORCE);
102102
if (!freed && collect == MI_ABANDON) {
103-
_mi_page_abandon(page, pq);
103+
// _PyMem_mi_page_maybe_free may have moved the page to a different
104+
// page queue, so we need to re-fetch the correct queue.
105+
uint8_t bin = (mi_page_is_in_full(page) ? MI_BIN_FULL : _mi_bin(page->xblock_size));
106+
_mi_page_abandon(page, &heap->pages[bin]);
104107
}
105108
}
106109
else if (collect == MI_ABANDON) {

0 commit comments

Comments
 (0)