Mercurial > dovecot > original-hg > dovecot-1.2
changeset 7302:8e65f6755843 HEAD
Fixed removing last item from priority queue.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 29 Feb 2008 03:31:06 +0200 |
parents | c75b2e1fa5a2 |
children | db4a29902723 |
files | src/lib/priorityq.c |
diffstat | 1 files changed, 5 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/priorityq.c Thu Feb 28 06:29:43 2008 +0200 +++ b/src/lib/priorityq.c Fri Feb 29 03:31:06 2008 +0200 @@ -66,11 +66,13 @@ heap_item_bubble_up(struct priorityq *pq, unsigned int idx) { struct priorityq_item **items; - unsigned int parent_idx; + unsigned int parent_idx, count; - items = array_idx_modifiable(&pq->items, 0); + items = array_get_modifiable(&pq->items, &count); while (idx > 0) { parent_idx = PARENT_IDX(idx); + + i_assert(idx < count); if (pq->cmp_callback(items[idx], items[parent_idx]) >= 0) break; @@ -124,7 +126,7 @@ heap_items_swap(items, idx, count); array_delete(&pq->items, count, 1); - if (count > 0) { + if (count > 0 && idx != count) { if (idx > 0) idx = heap_item_bubble_up(pq, idx); heap_item_bubble_down(pq, idx);