Skip to content

Commit

Permalink
revision: note the lack of free() in simplify_merges()
Browse files Browse the repository at this point in the history
Among the three similar-looking loops that walk singly linked
commit_list, the first one is only peeking and the same list is
later used for real work.  Leave a comment not to mistakenly
free its elements there.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Junio C Hamano committed Jun 8, 2012
1 parent a52f007 commit ab9d75a
Showing 1 changed file with 16 additions and 7 deletions.
23 changes: 16 additions & 7 deletions revision.c
Original file line number Diff line number Diff line change
Expand Up @@ -2015,23 +2015,31 @@ static struct commit_list **simplify_one(struct rev_info *revs, struct commit *c

static void simplify_merges(struct rev_info *revs)
{
struct commit_list *list;
struct commit_list *list, *next;
struct commit_list *yet_to_do, **tail;
struct commit *commit;

if (!revs->prune)
return;

/* feed the list reversed */
yet_to_do = NULL;
for (list = revs->commits; list; list = list->next)
commit_list_insert(list->item, &yet_to_do);
for (list = revs->commits; list; list = next) {
commit = list->item;
next = list->next;
/*
* Do not free(list) here yet; the original list
* is used later in this function.
*/
commit_list_insert(commit, &yet_to_do);
}
while (yet_to_do) {
list = yet_to_do;
yet_to_do = NULL;
tail = &yet_to_do;
while (list) {
struct commit *commit = list->item;
struct commit_list *next = list->next;
commit = list->item;
next = list->next;
free(list);
list = next;
tail = simplify_one(revs, commit, tail);
Expand All @@ -2043,9 +2051,10 @@ static void simplify_merges(struct rev_info *revs)
revs->commits = NULL;
tail = &revs->commits;
while (list) {
struct commit *commit = list->item;
struct commit_list *next = list->next;
struct merge_simplify_state *st;

commit = list->item;
next = list->next;
free(list);
list = next;
st = locate_simplify_state(revs, commit);
Expand Down

0 comments on commit ab9d75a

Please sign in to comment.