diff options
author | Nathan S. Evans <evans@in.tum.de> | 2009-12-03 01:44:18 +0000 |
---|---|---|
committer | Nathan S. Evans <evans@in.tum.de> | 2009-12-03 01:44:18 +0000 |
commit | 39edcc9862ce7ccb90b9059960f54733ee4d590b (patch) | |
tree | dda833565aa21ae0f2c12be571e296738e9fe4d4 /src/util/container_heap.c | |
parent | 365372ae37ff830f4456dc3594d0856f7842c25d (diff) | |
download | gnunet-39edcc9862ce7ccb90b9059960f54733ee4d590b.tar.gz gnunet-39edcc9862ce7ccb90b9059960f54733ee4d590b.zip |
heap bugfix
Diffstat (limited to 'src/util/container_heap.c')
-rw-r--r-- | src/util/container_heap.c | 10 |
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 | { |