pack-bitmap[-write]: use `object_array_clear()`, don't leak
Instead of setting the fields of rev->pending to 0/NULL, thereby leaking memory, call `object_array_clear(&rev->pending)`. In pack-bitmap.c, we make copies of those fields as `pending_nr` and `pending_e`. We never update the aliases and the original fields never change, so the aliases are not really needed and just make it harder than necessary to understand the code. While we're here, remove the aliases to make the code easier to follow. Signed-off-by: Martin Ågren <martin.agren@gmail.com> Reviewed-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Martin Ågren committed
Sep 23, 2017 at 01:34 UTC
4d01a7fa65c50e817a935396432e199b7a565f53
2 files changed
+4
-10
pack-bitmap-write.c
+1
-3
@@ -297,9 +297,7 @@ void bitmap_writer_build(struct packing_data *to_pack)
297
298
traverse_commit_list(&revs, show_commit, show_object, base);
299
300
- revs.pending.nr = 0;
301
- revs.pending.alloc = 0;
302
- revs.pending.objects = NULL;
300
+ object_array_clear(&revs.pending);
301
302
stored->bitmap = bitmap_to_ewah(base);
303
need_reset = 0;
pack-bitmap.c
+3
-7
@@ -653,8 +653,6 @@ static int in_bitmapped_pack(struct object_list *roots)
653
int prepare_bitmap_walk(struct rev_info *revs)
654
{
655
unsigned int i;
656
- unsigned int pending_nr = revs->pending.nr;
657
- struct object_array_entry *pending_e = revs->pending.objects;
656
657
struct object_list *wants = NULL;
658
struct object_list *haves = NULL;
@@ -669,8 +667,8 @@ int prepare_bitmap_walk(struct rev_info *revs)
667
return -1;
668
}
669
672
- for (i = 0; i < pending_nr; ++i) {
673
- struct object *object = pending_e[i].item;
670
+ for (i = 0; i < revs->pending.nr; ++i) {
671
+ struct object *object = revs->pending.objects[i].item;
672
673
if (object->type == OBJ_NONE)
674
parse_object_or_die(&object->oid, NULL);
@@ -714,9 +712,7 @@ int prepare_bitmap_walk(struct rev_info *revs)
712
if (!bitmap_git.loaded && load_pack_bitmap() < 0)
713
return -1;
714
717
- revs->pending.nr = 0;
718
- revs->pending.alloc = 0;
719
- revs->pending.objects = NULL;
715
+ object_array_clear(&revs->pending);
716
717
if (haves) {
718
revs->ignore_missing_links = 1;