Merge branch 'ma/leakplugs'
authorJunio C Hamano <gitster@pobox.com>
Fri, 29 Sep 2017 02:23:43 +0000 (11:23 +0900)
committerJunio C Hamano <gitster@pobox.com>
Fri, 29 Sep 2017 02:23:43 +0000 (11:23 +0900)
Memory leaks in various codepaths have been plugged.

* ma/leakplugs:
pack-bitmap[-write]: use `object_array_clear()`, don't leak
object_array: add and use `object_array_pop()`
object_array: use `object_array_clear()`, not `free()`
leak_pending: use `object_array_clear()`, not `free()`
commit: fix memory leak in `reduce_heads()`
builtin/commit: fix memory leak in `prepare_index()`

1  2 
bisect.c
builtin/checkout.c
builtin/commit.c
builtin/fast-export.c
builtin/fsck.c
commit.c
pack-bitmap.c
revision.h
shallow.c
submodule.c
upload-pack.c
diff --cc bisect.c
Simple merge
Simple merge
Simple merge
index da42ee5e604b72a8b3ac1edf38d8f75bd6805419,cff8d0fc5bbd8bd7acdd561b6c10ddc28e93b5bb..2fb60d6d48eae68affdcf64f6dbab0282408f393
@@@ -650,11 -634,10 +650,10 @@@ static void handle_tail(struct object_a
  {
        struct commit *commit;
        while (commits->nr) {
-               commit = (struct commit *)commits->objects[commits->nr - 1].item;
+               commit = (struct commit *)object_array_pop(commits);
                if (has_unshown_parent(commit))
                        return;
 -              handle_commit(commit, revs);
 +              handle_commit(commit, revs, paths_of_changed_objects);
-               commits->nr--;
        }
  }
  
diff --cc builtin/fsck.c
index 1e4c471b4141e6ec350c4caf58bacafb6ac07b7c,7d4ad027338ee59218378edf97884ea648b3c39e..56afe405b8072b3099a23661ac586f673e54ff0e
@@@ -180,14 -179,9 +180,9 @@@ static int traverse_reachable(void
        unsigned int nr = 0;
        int result = 0;
        if (show_progress)
 -              progress = start_progress_delay(_("Checking connectivity"), 0, 0, 2);
 +              progress = start_delayed_progress(_("Checking connectivity"), 0);
        while (pending.nr) {
-               struct object_array_entry *entry;
-               struct object *obj;
-               entry = pending.objects + --pending.nr;
-               obj = entry->item;
-               result |= traverse_one_object(obj);
+               result |= traverse_one_object(object_array_pop(&pending));
                display_progress(progress, ++nr);
        }
        stop_progress(&progress);
diff --cc commit.c
Simple merge
diff --cc pack-bitmap.c
Simple merge
diff --cc revision.h
Simple merge
diff --cc shallow.c
Simple merge
diff --cc submodule.c
Simple merge
diff --cc upload-pack.c
Simple merge