From: Taylor Blau Date: Tue, 26 Oct 2021 21:01:26 +0000 (-0400) Subject: pack-bitmap.c: more aggressively free in free_bitmap_index() X-Git-Tag: v2.35.0-rc0~129^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=655b8561d6b10f22f0e7350df9388110667001af;p=thirdparty%2Fgit.git pack-bitmap.c: more aggressively free in free_bitmap_index() The function free_bitmap_index() is somewhat lax in what it frees. There are two notable examples: - While it does call kh_destroy_oid_map on the "bitmaps" map, which maps commit OIDs to their corresponding bitmaps, the bitmaps themselves are not freed. Note here that we recycle already-freed ewah_bitmaps into a pool, but these are handled correctly by ewah_pool_free(). - We never bother to free the extended index's "positions" map, which we always allocate in load_bitmap(). Fix both of these. Signed-off-by: Taylor Blau Signed-off-by: Junio C Hamano --- diff --git a/pack-bitmap.c b/pack-bitmap.c index 3d81425c29..a56ceb9441 100644 --- a/pack-bitmap.c +++ b/pack-bitmap.c @@ -1859,9 +1859,17 @@ void free_bitmap_index(struct bitmap_index *b) ewah_pool_free(b->trees); ewah_pool_free(b->blobs); ewah_pool_free(b->tags); + if (b->bitmaps) { + struct stored_bitmap *sb; + kh_foreach_value(b->bitmaps, sb, { + ewah_pool_free(sb->root); + free(sb); + }); + } kh_destroy_oid_map(b->bitmaps); free(b->ext_index.objects); free(b->ext_index.hashes); + kh_destroy_oid_pos(b->ext_index.positions); bitmap_free(b->result); bitmap_free(b->haves); if (bitmap_is_midx(b)) {