eina rbtree iterator - fix leak found while debugging other problems
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>
Tue, 19 Jul 2016 06:40:16 +0000 (15:40 +0900)
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>
Tue, 19 Jul 2016 06:43:22 +0000 (15:43 +0900)
there was a leak of elements on  the itrator stack when the stack was
flushed still having some items on it, thus losing their pointers and
never freeing them.

@fix

src/lib/eina/eina_rbtree.c

index ab2a001..8c074a4 100644 (file)
@@ -119,7 +119,16 @@ _eina_rbtree_iterator_free(Eina_Iterator_Rbtree *it)
    if (eina_array_count(&iterator_trash) >= 7)
      {
         _eina_rbtree_iterator_forced_free(it);
-       return ;
+        return;
+     }
+   if (eina_array_count(it->stack) > 0)
+     {
+        unsigned int i;
+        Eina_Array_Iterator et;
+        Eina_Iterator_Rbtree_List *item;
+
+        EINA_ARRAY_ITER_NEXT(it->stack, i, item, et)
+          free(item);
      }
 
    eina_array_flush(it->stack);