summaryrefslogtreecommitdiff
path: root/src/graph.c
diff options
context:
space:
mode:
authorScott J. Goldman <scottjg@github.com>2012-12-09 21:55:51 -0800
committerScott J. Goldman <scottjg@github.com>2012-12-09 21:55:51 -0800
commit7d26c410bf6f5ba3be18c60d789d064219f9aca6 (patch)
tree80b67bc931fd6d1109996dd3288c9af74b824e8e /src/graph.c
parente51c8b99be1fc35bd3db30ae629cc404942cdc24 (diff)
downloadlibgit2-7d26c410bf6f5ba3be18c60d789d064219f9aca6.tar.gz
Fix a bunch of leaks, error handling casescorrect-ahead-behind
Diffstat (limited to 'src/graph.c')
-rw-r--r--src/graph.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/src/graph.c b/src/graph.c
index 2fc50ea6e..e61fc84fe 100644
--- a/src/graph.c
+++ b/src/graph.c
@@ -32,7 +32,6 @@ static int interesting(git_pqueue *list, git_commit_list *roots)
static int mark_parents(git_revwalk *walk, git_commit_list_node *one,
git_commit_list_node *two)
{
- int error;
unsigned int i;
git_commit_list *roots = NULL;
git_pqueue list;
@@ -47,16 +46,16 @@ static int mark_parents(git_revwalk *walk, git_commit_list_node *one,
return -1;
if (git_commit_list_parse(walk, one) < 0)
- return -1;
+ goto on_error;
one->flags |= PARENT1;
if (git_pqueue_insert(&list, one) < 0)
- return -1;
+ goto on_error;
if (git_commit_list_parse(walk, two) < 0)
- return -1;
+ goto on_error;
two->flags |= PARENT2;
if (git_pqueue_insert(&list, two) < 0)
- return -1;
+ goto on_error;
/* as long as there are non-STALE commits */
while (interesting(&list, roots)) {
@@ -80,25 +79,29 @@ static int mark_parents(git_revwalk *walk, git_commit_list_node *one,
if ((p->flags & flags) == flags)
continue;
- if ((error = git_commit_list_parse(walk, p)) < 0)
- return error;
+ if (git_commit_list_parse(walk, p) < 0)
+ goto on_error;
p->flags |= flags;
if (git_pqueue_insert(&list, p) < 0)
- return -1;
+ goto on_error;
}
+ /* Keep track of root commits, to make sure the path gets marked */
if (commit->out_degree == 0) {
if (git_commit_list_insert(commit, &roots) == NULL)
- return -1;
+ goto on_error;
}
}
- if (roots)
- git_commit_list_free(&roots);
+ git_commit_list_free(&roots);
git_pqueue_free(&list);
-
return 0;
+
+on_error:
+ git_commit_list_free(&roots);
+ git_pqueue_free(&list);
+ return -1;
}