fixing leak
authorChristian Grothoff <christian@grothoff.org>
Sun, 8 Nov 2009 13:23:16 +0000 (13:23 +0000)
committerChristian Grothoff <christian@grothoff.org>
Sun, 8 Nov 2009 13:23:16 +0000 (13:23 +0000)
src/util/container_heap.c

index 9d252159fafed679922664c651bda16f603eb82a..9a2afaebc17fb128ff3a5d12f6b77758a50dafcf 100644 (file)
@@ -132,7 +132,6 @@ GNUNET_CONTAINER_heap_destroy (struct GNUNET_CONTAINER_Heap *heap)
   while (heap->size > 0)
     GNUNET_CONTAINER_heap_remove_root (heap);
   GNUNET_free (heap);
-  return;
 }
 
 static struct GNUNET_CONTAINER_heap_node *
@@ -393,16 +392,22 @@ GNUNET_CONTAINER_heap_remove_root (struct GNUNET_CONTAINER_Heap *root)
   struct GNUNET_CONTAINER_heap_node *root_node;
   struct GNUNET_CONTAINER_heap_node *last;
 
-  if ((root == NULL) || (root->size == 0) || (root->root == NULL))
-    return NULL;
+  if ( (root == NULL) || 
+       (root->size == 0) || 
+       (root->root == NULL) )
+    {
+      GNUNET_break (0);
+      return NULL;
+    }
 
   root_node = root->root;
   ret = root_node->element;
   last = getPos (root, root->size);
 
-  if ((root_node == last) && (root->size == 1))
+  if ( (root_node == last) && (root->size == 1))
     {
       /* We are removing the last node in the heap! */
+      GNUNET_free (last);
       root->root = NULL;
       root->traversal_pos = NULL;
       GNUNET_assert (0 == --root->size);
@@ -418,10 +423,7 @@ GNUNET_CONTAINER_heap_remove_root (struct GNUNET_CONTAINER_Heap *root)
   root_node->cost = last->cost;
 
   if (root->traversal_pos == last)
-    {
-      root->traversal_pos = root->root;
-    }
-
+    root->traversal_pos = root->root;   
   GNUNET_free (last);
   root->size--;
   percolateDownHeap (root->root, root);