aboutsummaryrefslogtreecommitdiff
path: root/src/util/container_heap.c
diff options
context:
space:
mode:
authorNathan S. Evans <evans@in.tum.de>2009-12-03 01:44:18 +0000
committerNathan S. Evans <evans@in.tum.de>2009-12-03 01:44:18 +0000
commit39edcc9862ce7ccb90b9059960f54733ee4d590b (patch)
treedda833565aa21ae0f2c12be571e296738e9fe4d4 /src/util/container_heap.c
parent365372ae37ff830f4456dc3594d0856f7842c25d (diff)
downloadgnunet-39edcc9862ce7ccb90b9059960f54733ee4d590b.tar.gz
gnunet-39edcc9862ce7ccb90b9059960f54733ee4d590b.zip
heap bugfix
Diffstat (limited to 'src/util/container_heap.c')
-rw-r--r--src/util/container_heap.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/util/container_heap.c b/src/util/container_heap.c
index cde678257..9c6005beb 100644
--- a/src/util/container_heap.c
+++ b/src/util/container_heap.c
@@ -326,6 +326,8 @@ GNUNET_CONTAINER_heap_remove_node (struct GNUNET_CONTAINER_Heap *root,
326 ret = del_node->element; 326 ret = del_node->element;
327 last = getPos (root, root->size); 327 last = getPos (root, root->size);
328 328
329 root->size--;
330
329 old_cost = del_node->cost; 331 old_cost = del_node->cost;
330 del_node->element = last->element; 332 del_node->element = last->element;
331 del_node->cost = last->cost; 333 del_node->cost = last->cost;
@@ -339,8 +341,14 @@ GNUNET_CONTAINER_heap_remove_node (struct GNUNET_CONTAINER_Heap *root,
339 { 341 {
340 root->traversal_pos = root->root; 342 root->traversal_pos = root->root;
341 } 343 }
344
345 if (last == del_node)
346 {
347 GNUNET_free (last);
348 return ret;
349 }
342 GNUNET_free (last); 350 GNUNET_free (last);
343 root->size--; 351
344 352
345 if (del_node->cost > old_cost) 353 if (del_node->cost > old_cost)
346 { 354 {