diff options
author | Michael Schubert <schu@schu.io> | 2012-06-20 18:06:37 +0200 |
---|---|---|
committer | Michael Schubert <schu@schu.io> | 2012-06-21 10:33:24 +0200 |
commit | dca6b228d1725ce9ce7b940a172770f0e58b76cd (patch) | |
tree | a28e9e306d37ad423711c1cfe8270081b843c13c /src/notes.c | |
parent | 9311423c34bbd369928152c6a2b669204276ddd1 (diff) | |
download | libgit2-dca6b228d1725ce9ce7b940a172770f0e58b76cd.tar.gz |
notes: fix memory leaks
Diffstat (limited to 'src/notes.c')
-rw-r--r-- | src/notes.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/src/notes.c b/src/notes.c index efbdbabeb..0dfd3f891 100644 --- a/src/notes.c +++ b/src/notes.c @@ -56,7 +56,7 @@ static int find_subtree_r(git_tree **out, git_tree *root, error = find_subtree_in_current_level(&subtree, repo, root, target, *fanout); if (error == GIT_EEXISTS) { - return git_tree_lookup(out, repo, git_object_id((const git_object *)root)); + return git_tree_lookup(out, repo, git_tree_id(root)); } if (error < 0) @@ -64,13 +64,7 @@ static int find_subtree_r(git_tree **out, git_tree *root, *fanout += 2; error = find_subtree_r(out, subtree, repo, target, fanout); - - /* - * root is not ours to free, and the last subtree is the - * one being returned => we only need to free the subtrees in-between - */ - if (*out != subtree) - git_tree_free(subtree); + git_tree_free(subtree); return error; } @@ -153,7 +147,7 @@ static int manipulate_note_in_tree_r( int current_error)) { int error = -1; - git_tree *subtree = NULL; + git_tree *subtree = NULL, *new = NULL; char subtree_name[3]; error = find_subtree_in_current_level( @@ -176,7 +170,7 @@ static int manipulate_note_in_tree_r( /* An existing fanout has been found, let's dig deeper */ error = manipulate_note_in_tree_r( - out, repo, subtree, note_oid, annotated_object_sha, + &new, repo, subtree, note_oid, annotated_object_sha, fanout + 2, note_exists_cb, note_notfound_cb); if (error < 0) @@ -185,10 +179,12 @@ static int manipulate_note_in_tree_r( strncpy(subtree_name, annotated_object_sha + fanout, 2); subtree_name[2] = '\0'; - error = tree_write(out, repo, parent, - git_object_id((const git_object *)(*out)), subtree_name, 0040000); + error = tree_write(out, repo, parent, git_tree_id(new), + subtree_name, 0040000); + cleanup: + git_tree_free(new); git_tree_free(subtree); return error; } |