diff options
author | Taylor Blau <me@ttaylorr.com> | 2021-10-27 00:01:26 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-10-29 01:32:14 +0300 |
commit | 655b8561d6b10f22f0e7350df9388110667001af (patch) | |
tree | fb687841f5a1471b248f54569307efcce0d18ff6 /pack-bitmap.c | |
parent | 022815114a8a57188bc0e8fd622e10d5e22604dc (diff) |
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 <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'pack-bitmap.c')
-rw-r--r-- | pack-bitmap.c | 8 |
1 files changed, 8 insertions, 0 deletions
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)) { |