Merge branch 'ab/plug-leak-in-revisions'
Plug the memory leaks from the trickiest API of all, the revision walker. * ab/plug-leak-in-revisions: (27 commits) revisions API: add a TODO for diff_free(&revs->diffopt) revisions API: have release_revisions() release "topo_walk_info" revisions API: have release_revisions() release "date_mode" revisions API: call diff_free(&revs->pruning) in revisions_release() revisions API: release "reflog_info" in release revisions() revisions API: clear "boundary_commits" in release_revisions() revisions API: have release_revisions() release "prune_data" revisions API: have release_revisions() release "grep_filter" revisions API: have release_revisions() release "filter" revisions API: have release_revisions() release "cmdline" revisions API: have release_revisions() release "mailmap" revisions API: have release_revisions() release "commits" revisions API users: use release_revisions() for "prune_data" users revisions API users: use release_revisions() with UNLEAK() revisions API users: use release_revisions() in builtin/log.c revisions API users: use release_revisions() in http-push.c revisions API users: add "goto cleanup" for release_revisions() stash: always have the owner of "stash_info" free it revisions API users: use release_revisions() needing REV_INFO_INIT revision.[ch]: document and move code declared around "init" ...
This commit is contained in:
@ -649,7 +649,7 @@ static void status_submodule(const char *path, const struct object_id *ce_oid,
|
||||
{
|
||||
char *displaypath;
|
||||
struct strvec diff_files_args = STRVEC_INIT;
|
||||
struct rev_info rev;
|
||||
struct rev_info rev = REV_INFO_INIT;
|
||||
int diff_files_result;
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
const char *git_dir;
|
||||
@ -736,6 +736,7 @@ static void status_submodule(const char *path, const struct object_id *ce_oid,
|
||||
cleanup:
|
||||
strvec_clear(&diff_files_args);
|
||||
free(displaypath);
|
||||
release_revisions(&rev);
|
||||
}
|
||||
|
||||
static void status_submodule_cb(const struct cache_entry *list_item,
|
||||
@ -1114,6 +1115,7 @@ static int compute_summary_module_list(struct object_id *head_oid,
|
||||
struct strvec diff_args = STRVEC_INIT;
|
||||
struct rev_info rev;
|
||||
struct module_cb_list list = MODULE_CB_LIST_INIT;
|
||||
int ret = 0;
|
||||
|
||||
strvec_push(&diff_args, get_diff_cmd(diff_cmd));
|
||||
if (info->cached)
|
||||
@ -1139,11 +1141,13 @@ static int compute_summary_module_list(struct object_id *head_oid,
|
||||
setup_work_tree();
|
||||
if (read_cache_preload(&rev.diffopt.pathspec) < 0) {
|
||||
perror("read_cache_preload");
|
||||
return -1;
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
} else if (read_cache() < 0) {
|
||||
perror("read_cache");
|
||||
return -1;
|
||||
ret = -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
if (diff_cmd == DIFF_INDEX)
|
||||
@ -1151,8 +1155,10 @@ static int compute_summary_module_list(struct object_id *head_oid,
|
||||
else
|
||||
run_diff_files(&rev, 0);
|
||||
prepare_submodule_summary(info, &list);
|
||||
cleanup:
|
||||
strvec_clear(&diff_args);
|
||||
return 0;
|
||||
release_revisions(&rev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int module_summary(int argc, const char **argv, const char *prefix)
|
||||
|
Reference in New Issue
Block a user