aboutsummaryrefslogtreecommitdiffstats
path: root/src/libutil/heap.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libutil/heap.c')
-rw-r--r--src/libutil/heap.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/libutil/heap.c b/src/libutil/heap.c
index 47c996732..6fc1d9783 100644
--- a/src/libutil/heap.c
+++ b/src/libutil/heap.c
@@ -123,10 +123,17 @@ rspamd_min_heap_pop (struct rspamd_min_heap *heap)
elt = g_ptr_array_index (heap->ar, 0);
last = g_ptr_array_index (heap->ar, heap->ar->len - 1);
- /* Now replace elt with the last element and sink it if needed */
- heap_swap (heap, elt, last);
- g_ptr_array_remove_index_fast (heap->ar, heap->ar->len - 1);
- rspamd_min_heap_sink (heap, last);
+
+ if (elt != last) {
+ /* Now replace elt with the last element and sink it if needed */
+ heap_swap (heap, elt, last);
+ g_ptr_array_remove_index_fast (heap->ar, heap->ar->len - 1);
+ rspamd_min_heap_sink (heap, last);
+ }
+ else {
+ g_ptr_array_remove_index_fast (heap->ar, heap->ar->len - 1);
+ }
+
return elt;
}