Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
read-tree: stop leaking tree objects
author
Jonathan Nieder
<jrnieder@gmail.com>
Tue, 10 Aug 2010 03:33:44 +0000
(22:33 -0500)
committer
Junio C Hamano
<gitster@pobox.com>
Wed, 11 Aug 2010 16:58:18 +0000
(09:58 -0700)
The underlying problem is that the fill_tree_descriptor()
API is easy to misuse, and this patch does not fix that.
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
unpack-trees.c
patch
|
blob
|
history
raw
|
patch
| inline |
side by side
(parent:
59efba6
)
diff --git
a/unpack-trees.c
b/unpack-trees.c
index 8cf0da317d8afe4bfe3cae7051e3a385d44cf7ef..f561d88156b827b15bad7dd4e00f944718149bd9 100644
(file)
--- 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;
}