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>
This commit is contained in:
parent
551cf8b655
commit
acac50dd8c
9
object.c
9
object.c
@ -307,6 +307,15 @@ int object_list_contains(struct object_list *list, struct object *obj)
|
|||||||
return 0;
|
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
|
* A zero-length string to which object_array_entry::name can be
|
||||||
* initialized without requiring a malloc/free.
|
* initialized without requiring a malloc/free.
|
||||||
|
2
object.h
2
object.h
@ -151,6 +151,8 @@ struct object_list *object_list_insert(struct object *item,
|
|||||||
|
|
||||||
int object_list_contains(struct object_list *list, struct object *obj);
|
int object_list_contains(struct object_list *list, struct object *obj);
|
||||||
|
|
||||||
|
void object_list_free(struct object_list **list);
|
||||||
|
|
||||||
/* Object array handling .. */
|
/* Object array handling .. */
|
||||||
void add_object_array(struct object *obj, const char *name, struct object_array *array);
|
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);
|
void add_object_array_with_path(struct object *obj, const char *name, struct object_array *array, unsigned mode, const char *path);
|
||||||
|
@ -787,10 +787,15 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs)
|
|||||||
bitmap_git->result = wants_bitmap;
|
bitmap_git->result = wants_bitmap;
|
||||||
bitmap_git->haves = haves_bitmap;
|
bitmap_git->haves = haves_bitmap;
|
||||||
|
|
||||||
|
object_list_free(&wants);
|
||||||
|
object_list_free(&haves);
|
||||||
|
|
||||||
return bitmap_git;
|
return bitmap_git;
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
free_bitmap_index(bitmap_git);
|
free_bitmap_index(bitmap_git);
|
||||||
|
object_list_free(&wants);
|
||||||
|
object_list_free(&haves);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user