Merge commit 'c2e936de07d054bf476e60445b453bf6b4836820'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 1 Aug 2013 09:06:38 +0000 (11:06 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 1 Aug 2013 09:29:03 +0000 (11:29 +0200)
* commit 'c2e936de07d054bf476e60445b453bf6b4836820':
  tree-test: Refactor and plug memory leaks

Conflicts:
libavutil/tree.c

Most of this commit is not merged due to bugs in it

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavutil/tree.c

@@@ -219,7 -218,15 +220,8 @@@ int main(int argc, char **argv
      av_lfg_init(&prng, 1);
  
      for (i = 0; i < 10000; i++) {
 -        AVTreeNode *node2 = NULL;
          intptr_t j = av_lfg_get(&prng) % 86294;
 -        void *ret, *jj = (void *)(j + 1);
 -
 -        while (ret = av_tree_find(root, jj, cmp, NULL)) {
 -            j  = av_lfg_get(&prng) % 86294;
 -            jj = (void *)(j + 1);
 -        }
          if (check(root) > 999) {
              av_log(NULL, AV_LOG_ERROR, "FATAL error %d\n", i);
              print(root, 0);
  
          if (!node)
              node = av_tree_node_alloc();
 -        av_tree_insert(&root, jj, cmp, &node);
 -
 -        while (ret = av_tree_find(root, jj, cmp, NULL)) {
 -            j  = av_lfg_get(&prng) % 86294;
 -            jj = (void *)(j + 1);
+         if (!node) {
+             av_log(NULL, AV_LOG_ERROR, "Memory allocation failure.\n");
+             return AVERROR(ENOMEM);
+         }
 +        av_tree_insert(&root, (void *)(j + 1), cmp, &node);
 +
 +        j = av_lfg_get(&prng) % 86294;
 +        {
 +            AVTreeNode *node2 = NULL;
 +            av_log(NULL, AV_LOG_DEBUG, "removing %4d\n", (int)j);
 +            av_tree_insert(&root, (void *)(j + 1), cmp, &node2);
 +            k = av_tree_find(root, (void *)(j + 1), cmp, NULL);
 +            if (k)
 +                av_log(NULL, AV_LOG_ERROR, "removal failure %d\n", i);
          }
 -
 -        ret = av_tree_insert(&root, jj, cmp, &node2);
 -        if (ret != jj)
 -            av_tree_destroy(node2);
 -        ret = av_tree_find(root, jj, cmp, NULL);
 -        if (ret)
 -            av_log(NULL, AV_LOG_ERROR, "removal failure %d\n", i);
      }
+     av_tree_destroy(root);
      return 0;
  }
  #endif