summaryrefslogtreecommitdiff
path: root/pack-bitmap.c
diff options
context:
space:
mode:
authorTaylor Blau <me@ttaylorr.com>2021-10-26 21:01:26 (GMT)
committerJunio C Hamano <gitster@pobox.com>2021-10-28 22:32:14 (GMT)
commit655b8561d6b10f22f0e7350df9388110667001af (patch)
treefb687841f5a1471b248f54569307efcce0d18ff6 /pack-bitmap.c
parent022815114a8a57188bc0e8fd622e10d5e22604dc (diff)
downloadgit-655b8561d6b10f22f0e7350df9388110667001af.zip
git-655b8561d6b10f22f0e7350df9388110667001af.tar.gz
git-655b8561d6b10f22f0e7350df9388110667001af.tar.bz2
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.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/pack-bitmap.c b/pack-bitmap.c
index 3d81425..a56ceb9 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)) {