Merge branch 'en/plug-leaks-in-merge'
Leakfix. * en/plug-leaks-in-merge: merge: fix memory leaks in cmd_merge() merge-ort: fix memory leak in merge_ort_internal()maint
commit
c70b5e7187
|
@ -1273,7 +1273,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||||
int best_cnt = -1, merge_was_ok = 0, automerge_was_ok = 0;
|
int best_cnt = -1, merge_was_ok = 0, automerge_was_ok = 0;
|
||||||
struct commit_list *common = NULL;
|
struct commit_list *common = NULL;
|
||||||
const char *best_strategy = NULL, *wt_strategy = NULL;
|
const char *best_strategy = NULL, *wt_strategy = NULL;
|
||||||
struct commit_list *remoteheads, *p;
|
struct commit_list *remoteheads = NULL, *p;
|
||||||
void *branch_to_free;
|
void *branch_to_free;
|
||||||
int orig_argc = argc;
|
int orig_argc = argc;
|
||||||
|
|
||||||
|
@ -1752,6 +1752,10 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||||
ret = suggest_conflicts();
|
ret = suggest_conflicts();
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
if (!automerge_was_ok) {
|
||||||
|
free_commit_list(common);
|
||||||
|
free_commit_list(remoteheads);
|
||||||
|
}
|
||||||
strbuf_release(&buf);
|
strbuf_release(&buf);
|
||||||
free(branch_to_free);
|
free(branch_to_free);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
10
merge-ort.c
10
merge-ort.c
|
@ -4579,7 +4579,7 @@ static void merge_ort_internal(struct merge_options *opt,
|
||||||
struct commit *h2,
|
struct commit *h2,
|
||||||
struct merge_result *result)
|
struct merge_result *result)
|
||||||
{
|
{
|
||||||
struct commit_list *iter;
|
struct commit *next;
|
||||||
struct commit *merged_merge_bases;
|
struct commit *merged_merge_bases;
|
||||||
const char *ancestor_name;
|
const char *ancestor_name;
|
||||||
struct strbuf merge_base_abbrev = STRBUF_INIT;
|
struct strbuf merge_base_abbrev = STRBUF_INIT;
|
||||||
|
@ -4608,7 +4608,8 @@ static void merge_ort_internal(struct merge_options *opt,
|
||||||
ancestor_name = merge_base_abbrev.buf;
|
ancestor_name = merge_base_abbrev.buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (iter = merge_bases; iter; iter = iter->next) {
|
for (next = pop_commit(&merge_bases); next;
|
||||||
|
next = pop_commit(&merge_bases)) {
|
||||||
const char *saved_b1, *saved_b2;
|
const char *saved_b1, *saved_b2;
|
||||||
struct commit *prev = merged_merge_bases;
|
struct commit *prev = merged_merge_bases;
|
||||||
|
|
||||||
|
@ -4625,7 +4626,7 @@ static void merge_ort_internal(struct merge_options *opt,
|
||||||
saved_b2 = opt->branch2;
|
saved_b2 = opt->branch2;
|
||||||
opt->branch1 = "Temporary merge branch 1";
|
opt->branch1 = "Temporary merge branch 1";
|
||||||
opt->branch2 = "Temporary merge branch 2";
|
opt->branch2 = "Temporary merge branch 2";
|
||||||
merge_ort_internal(opt, NULL, prev, iter->item, result);
|
merge_ort_internal(opt, NULL, prev, next, result);
|
||||||
if (result->clean < 0)
|
if (result->clean < 0)
|
||||||
return;
|
return;
|
||||||
opt->branch1 = saved_b1;
|
opt->branch1 = saved_b1;
|
||||||
|
@ -4636,8 +4637,7 @@ static void merge_ort_internal(struct merge_options *opt,
|
||||||
result->tree,
|
result->tree,
|
||||||
"merged tree");
|
"merged tree");
|
||||||
commit_list_insert(prev, &merged_merge_bases->parents);
|
commit_list_insert(prev, &merged_merge_bases->parents);
|
||||||
commit_list_insert(iter->item,
|
commit_list_insert(next, &merged_merge_bases->parents->next);
|
||||||
&merged_merge_bases->parents->next);
|
|
||||||
|
|
||||||
clear_or_reinit_internal_opts(opt->priv, 1);
|
clear_or_reinit_internal_opts(opt->priv, 1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue