Browse Source

pack-bitmap: fix leak of haves/wants object lists

When we do a bitmap-aware revision traversal, we create an object_list
for each of the "haves" and "wants" tips. After creating the result
bitmaps these are no longer needed or used, but we never free the list
memory.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jeff King 5 years ago committed by Junio C Hamano
parent
commit
acac50dd8c
  1. 9
      object.c
  2. 2
      object.h
  3. 5
      pack-bitmap.c

9
object.c

@ -307,6 +307,15 @@ int object_list_contains(struct object_list *list, struct object *obj) @@ -307,6 +307,15 @@ int object_list_contains(struct object_list *list, struct object *obj)
return 0;
}

void object_list_free(struct object_list **list)
{
while (*list) {
struct object_list *p = *list;
*list = p->next;
free(p);
}
}

/*
* A zero-length string to which object_array_entry::name can be
* initialized without requiring a malloc/free.

2
object.h

@ -151,6 +151,8 @@ struct object_list *object_list_insert(struct object *item, @@ -151,6 +151,8 @@ struct object_list *object_list_insert(struct object *item,

int object_list_contains(struct object_list *list, struct object *obj);

void object_list_free(struct object_list **list);

/* Object array handling .. */
void add_object_array(struct object *obj, const char *name, struct object_array *array);
void add_object_array_with_path(struct object *obj, const char *name, struct object_array *array, unsigned mode, const char *path);

5
pack-bitmap.c

@ -787,10 +787,15 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs) @@ -787,10 +787,15 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs)
bitmap_git->result = wants_bitmap;
bitmap_git->haves = haves_bitmap;

object_list_free(&wants);
object_list_free(&haves);

return bitmap_git;

cleanup:
free_bitmap_index(bitmap_git);
object_list_free(&wants);
object_list_free(&haves);
return NULL;
}


Loading…
Cancel
Save