fibheap.c (fibheap_replace_key_data): Make sure we don't early out when forcing the minimum.

* fibheap.c (fibheap_replace_key_data): Make sure we don't early
        out when forcing the minimum.
        (fibheap_delete_node): Assert that we managed to force the minimum.

From-SVN: r147968
This commit is contained in:
Michael Matz 2009-05-29 02:55:25 +00:00 committed by Michael Matz
parent 5ff8e3a454
commit 4cfaf1ec98
2 changed files with 15 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2009-05-29 Michael Matz <matz@suse.de>
* fibheap.c (fibheap_replace_key_data): Make sure we don't early
out when forcing the minimum.
(fibheap_delete_node): Assert that we managed to force the minimum.
2009-05-25 Tristan Gingold <gingold@adacore.com>
* config.h-vms: Rewritten. Define configure macros.

View File

@ -214,7 +214,10 @@ fibheap_replace_key_data (fibheap_t heap, fibnode_t node,
node->key = key;
y = node->parent;
if (okey == key)
/* Short-circuit if the key is the same, as we then don't have to
do anything. Except if we're trying to force the new node to
be the new minimum for delete. */
if (okey == key && okey != FIBHEAPKEY_MIN)
return odata;
/* These two compares are specifically <= 0 to make sure that in the case
@ -256,6 +259,11 @@ fibheap_delete_node (fibheap_t heap, fibnode_t node)
/* To perform delete, we just make it the min key, and extract. */
fibheap_replace_key (heap, node, FIBHEAPKEY_MIN);
if (node != heap->min)
{
fprintf (stderr, "Can't force minimum on fibheap.\n");
abort ();
}
fibheap_extract_min (heap);
return ret;