Heap code fix

When deleting an entry from a heap that was at entry h->used - 1, we'd
end up calling heap_sift() on an entry outside the heap - the entry we
just removed - which would end up re-adding it to the heap and deleting
something we didn't want to delete. Oops...

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
This commit is contained in:
Kent Overstreet 2022-03-28 12:39:12 -04:00
parent f3cdace86c
commit c5183ea57f

View File

@ -93,9 +93,11 @@ do { \
\
BUG_ON(_i >= (h)->used); \
(h)->used--; \
heap_swap(h, _i, (h)->used); \
heap_sift_down(h, _i, cmp); \
heap_sift(h, _i, cmp); \
if ((_i) < (h)->used) { \
heap_swap(h, _i, (h)->used); \
heap_sift_down(h, _i, cmp); \
heap_sift(h, _i, cmp); \
} \
} while (0)
#define heap_pop(h, d, cmp) \