]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'ab/plug-leak-in-revisions'
authorJunio C Hamano <gitster@pobox.com>
Tue, 7 Jun 2022 21:10:56 +0000 (14:10 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 7 Jun 2022 21:10:56 +0000 (14:10 -0700)
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"
  ...

28 files changed:
1  2 
builtin/add.c
builtin/bisect--helper.c
builtin/blame.c
builtin/checkout.c
builtin/commit.c
builtin/diff.c
builtin/fast-export.c
builtin/log.c
builtin/pack-objects.c
builtin/reflog.c
builtin/stash.c
builtin/submodule--helper.c
bundle.c
commit.c
http-push.c
merge-ort.c
merge-recursive.c
midx.c
pack-bitmap-write.c
ref-filter.c
remote.c
revision.c
revision.h
sequencer.c
shallow.c
submodule.c
t/t1411-reflog-show.sh
t/t9001-send-email.sh

diff --cc builtin/add.c
index 145fc9b8f2dab668521f70e45aed116159dacf8a,fc729e14c17ce3c8a4f1836e0d5f75da64cfacc8..f84372964c8c486601941c927d6e39bb8da42084
@@@ -141,17 -141,8 +141,17 @@@ int add_files_to_cache(const char *pref
        rev.diffopt.format_callback_data = &data;
        rev.diffopt.flags.override_submodule_config = 1;
        rev.max_count = 0; /* do not compare unmerged paths with stage #2 */
 +
 +      /*
 +       * Use an ODB transaction to optimize adding multiple objects.
 +       * This function is invoked from commands other than 'add', which
 +       * may not have their own transaction active.
 +       */
 +      begin_odb_transaction();
        run_diff_files(&rev, DIFF_RACY_IS_MODIFIED);
-       clear_pathspec(&rev.prune_data);
 +      end_odb_transaction();
 +
+       release_revisions(&rev);
        return !!data.add_errors;
  }
  
Simple merge
diff --cc builtin/blame.c
Simple merge
Simple merge
Simple merge
diff --cc builtin/diff.c
Simple merge
Simple merge
diff --cc builtin/log.c
index 2eb0063cc167ee84d14a25cb45678cb0ac617a41,c40ebe1c3f4ee3e31c7930840ec111d55ff25f70..88a5e98875adb0398b2855460bddd5fa43e073ec
@@@ -745,12 -738,7 +752,11 @@@ int cmd_show(int argc, const char **arg
                        ret = error(_("unknown type: %d"), o->type);
                }
        }
-       free(objects);
-       return ret;
 +
 +      rev.diffopt.no_free = 0;
 +      diff_free(&rev.diffopt);
 +
+       return cmd_log_deinit(ret, &rev);
  }
  
  /*
Simple merge
Simple merge
diff --cc builtin/stash.c
Simple merge
Simple merge
diff --cc bundle.c
Simple merge
diff --cc commit.c
Simple merge
diff --cc http-push.c
Simple merge
diff --cc merge-ort.c
Simple merge
Simple merge
diff --cc midx.c
Simple merge
Simple merge
diff --cc ref-filter.c
Simple merge
diff --cc remote.c
Simple merge
diff --cc revision.c
Simple merge
diff --cc revision.h
Simple merge
diff --cc sequencer.c
Simple merge
diff --cc shallow.c
Simple merge
diff --cc submodule.c
index 86c8f0f89dbdb0e82cb18054392a884c70a71811,e9c320d16de02dd4b953a6dba19266bf132f2bfe..7923e951e1c1ba9429ab2e35e23cd89d94ab3d3e
@@@ -928,9 -905,10 +928,10 @@@ static void collect_changed_submodules(
        }
  
        reset_revision_walk();
+       release_revisions(&rev);
  }
  
 -static void free_submodules_oids(struct string_list *submodules)
 +static void free_submodules_data(struct string_list *submodules)
  {
        struct string_list_item *item;
        for_each_string_list_item(item, submodules)
Simple merge
Simple merge