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:
11
submodule.c
11
submodule.c
@ -619,7 +619,7 @@ void show_submodule_diff_summary(struct diff_options *o, const char *path,
|
||||
struct object_id *one, struct object_id *two,
|
||||
unsigned dirty_submodule)
|
||||
{
|
||||
struct rev_info rev;
|
||||
struct rev_info rev = REV_INFO_INIT;
|
||||
struct commit *left = NULL, *right = NULL;
|
||||
struct commit_list *merge_bases = NULL;
|
||||
struct repository *sub;
|
||||
@ -645,8 +645,8 @@ void show_submodule_diff_summary(struct diff_options *o, const char *path,
|
||||
print_submodule_diff_summary(sub, &rev, o);
|
||||
|
||||
out:
|
||||
if (merge_bases)
|
||||
free_commit_list(merge_bases);
|
||||
free_commit_list(merge_bases);
|
||||
release_revisions(&rev);
|
||||
clear_commit_marks(left, ~0);
|
||||
clear_commit_marks(right, ~0);
|
||||
if (sub) {
|
||||
@ -735,8 +735,7 @@ void show_submodule_inline_diff(struct diff_options *o, const char *path,
|
||||
|
||||
done:
|
||||
strbuf_release(&sb);
|
||||
if (merge_bases)
|
||||
free_commit_list(merge_bases);
|
||||
free_commit_list(merge_bases);
|
||||
if (left)
|
||||
clear_commit_marks(left, ~0);
|
||||
if (right)
|
||||
@ -925,9 +924,11 @@ static void collect_changed_submodules(struct repository *r,
|
||||
diff_rev.diffopt.format_callback_data = &data;
|
||||
diff_rev.dense_combined_merges = 1;
|
||||
diff_tree_combined_merge(commit, &diff_rev);
|
||||
release_revisions(&diff_rev);
|
||||
}
|
||||
|
||||
reset_revision_walk();
|
||||
release_revisions(&rev);
|
||||
}
|
||||
|
||||
static void free_submodules_data(struct string_list *submodules)
|
||||
|
||||
Reference in New Issue
Block a user