aboutsummaryrefslogtreecommitdiff
path: root/unpack-trees.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2010-08-20 12:53:09 -0700
committerJunio C Hamano <gitster@pobox.com>2010-08-20 12:53:09 -0700
commit16bfbe6352e90b87de26effe5ce120ab74ebafc7 (patch)
tree6525fdf55a6da9e426516546e7b652c1458b971f /unpack-trees.c
parent316fa401e1c953ffc80533aaf6839817595cdd77 (diff)
parentb6b56aceb85fe05dc681ac7ee1249e6b6e26e957 (diff)
downloadgit-16bfbe6352e90b87de26effe5ce120ab74ebafc7.tar.gz
git-16bfbe6352e90b87de26effe5ce120ab74ebafc7.tar.xz
Merge branch 'jn/maint-plug-leak' into maint
* jn/maint-plug-leak: write-tree: Avoid leak when index refers to an invalid object read-tree: stop leaking tree objects core: Stop leaking ondisk_cache_entrys
Diffstat (limited to 'unpack-trees.c')
-rw-r--r--unpack-trees.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/unpack-trees.c b/unpack-trees.c
index 8cf0da317..f561d8815 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -329,6 +329,7 @@ static int traverse_trees_recursive(int n, unsigned long dirmask, unsigned long
{
int i, ret, bottom;
struct tree_desc t[MAX_UNPACK_TREES];
+ void *buf[MAX_UNPACK_TREES];
struct traverse_info newinfo;
struct name_entry *p;
@@ -346,12 +347,16 @@ static int traverse_trees_recursive(int n, unsigned long dirmask, unsigned long
const unsigned char *sha1 = NULL;
if (dirmask & 1)
sha1 = names[i].sha1;
- fill_tree_descriptor(t+i, sha1);
+ buf[i] = fill_tree_descriptor(t+i, sha1);
}
bottom = switch_cache_bottom(&newinfo);
ret = traverse_trees(n, t, &newinfo);
restore_cache_bottom(&newinfo, bottom);
+
+ for (i = 0; i < n; i++)
+ free(buf[i]);
+
return ret;
}