Merge branch 'ps/leakfixes-more'
More memory leaks have been plugged. * ps/leakfixes-more: (29 commits) builtin/blame: fix leaking ignore revs files builtin/blame: fix leaking prefixed paths blame: fix leaking data for blame scoreboards line-range: plug leaking find functions merge: fix leaking merge bases builtin/merge: fix leaking `struct cmdnames` in `get_strategy()` sequencer: fix memory leaks in `make_script_with_merges()` builtin/clone: plug leaking HEAD ref in `wanted_peer_refs()` apply: fix leaking string in `match_fragment()` sequencer: fix leaking string buffer in `commit_staged_changes()` commit: fix leaking parents when calling `commit_tree_extended()` config: fix leaking "core.notesref" variable rerere: fix various trivial leaks builtin/stash: fix leak in `show_stash()` revision: free diff options builtin/log: fix leaking commit list in git-cherry(1) merge-recursive: fix memory leak when finalizing merge builtin/merge-recursive: fix leaking object ID bases builtin/difftool: plug memory leaks in `run_dir_diff()` object-name: free leaking object contexts ...
This commit is contained in:
@@ -164,7 +164,7 @@ static struct strategy *get_strategy(const char *name)
|
||||
{
|
||||
int i;
|
||||
struct strategy *ret;
|
||||
static struct cmdnames main_cmds, other_cmds;
|
||||
static struct cmdnames main_cmds = {0}, other_cmds = {0};
|
||||
static int loaded;
|
||||
char *default_strategy = getenv("GIT_TEST_MERGE_ALGORITHM");
|
||||
|
||||
@@ -182,10 +182,9 @@ static struct strategy *get_strategy(const char *name)
|
||||
return &all_strategy[i];
|
||||
|
||||
if (!loaded) {
|
||||
struct cmdnames not_strategies;
|
||||
struct cmdnames not_strategies = {0};
|
||||
loaded = 1;
|
||||
|
||||
memset(¬_strategies, 0, sizeof(struct cmdnames));
|
||||
load_command_list("git-merge-", &main_cmds, &other_cmds);
|
||||
for (i = 0; i < main_cmds.cnt; i++) {
|
||||
int j, found = 0;
|
||||
@@ -197,6 +196,8 @@ static struct strategy *get_strategy(const char *name)
|
||||
add_cmdname(¬_strategies, ent->name, ent->len);
|
||||
}
|
||||
exclude_cmds(&main_cmds, ¬_strategies);
|
||||
|
||||
cmdnames_release(¬_strategies);
|
||||
}
|
||||
if (!is_in_cmdlist(&main_cmds, name) && !is_in_cmdlist(&other_cmds, name)) {
|
||||
fprintf(stderr, _("Could not find merge strategy '%s'.\n"), name);
|
||||
@@ -216,6 +217,9 @@ static struct strategy *get_strategy(const char *name)
|
||||
CALLOC_ARRAY(ret, 1);
|
||||
ret->name = xstrdup(name);
|
||||
ret->attr = NO_TRIVIAL;
|
||||
|
||||
cmdnames_release(&main_cmds);
|
||||
cmdnames_release(&other_cmds);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -745,6 +749,8 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
|
||||
else
|
||||
clean = merge_recursive(&o, head, remoteheads->item,
|
||||
reversed, &result);
|
||||
free_commit_list(reversed);
|
||||
|
||||
if (clean < 0) {
|
||||
rollback_lock_file(&lock);
|
||||
return 2;
|
||||
@@ -898,7 +904,7 @@ static void prepare_to_commit(struct commit_list *remoteheads)
|
||||
static int merge_trivial(struct commit *head, struct commit_list *remoteheads)
|
||||
{
|
||||
struct object_id result_tree, result_commit;
|
||||
struct commit_list *parents, **pptr = &parents;
|
||||
struct commit_list *parents = NULL, **pptr = &parents;
|
||||
|
||||
if (repo_refresh_and_write_index(the_repository, REFRESH_QUIET,
|
||||
SKIP_IF_UNCHANGED, 0, NULL, NULL,
|
||||
@@ -914,7 +920,9 @@ static int merge_trivial(struct commit *head, struct commit_list *remoteheads)
|
||||
&result_commit, NULL, sign_commit))
|
||||
die(_("failed to write commit object"));
|
||||
finish(head, remoteheads, &result_commit, "In-index merge");
|
||||
|
||||
remove_merge_branch_state(the_repository);
|
||||
free_commit_list(parents);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -940,8 +948,10 @@ static int finish_automerge(struct commit *head,
|
||||
die(_("failed to write commit object"));
|
||||
strbuf_addf(&buf, "Merge made by the '%s' strategy.", wt_strategy);
|
||||
finish(head, remoteheads, &result_commit, buf.buf);
|
||||
|
||||
strbuf_release(&buf);
|
||||
remove_merge_branch_state(the_repository);
|
||||
free_commit_list(parents);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user