mirror of
https://github.com/koverstreet/bcachefs-tools.git
synced 2025-01-23 00:07:07 +03:00
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:
parent
f3cdace86c
commit
c5183ea57f
@ -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) \
|
||||
|
Loading…
Reference in New Issue
Block a user