git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 9/9] pack-bitmap.c: more aggressively free in free_bitmap_index()

From
Taylor Blau <me@ttaylorr.com>
Date
Oct 26, 2021, 21:01 UTC
Message-ID
<c1e7e6cc924f61d237e5cc7045ad9698fbe4c3b2.1635282024.git.me@ttaylorr.com>
In-Reply-To
<cover.1635282024.git.me@ttaylorr.com>

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>
---
 pack-bitmap.c | 8 ++++++++
 1 file changed, 8 insertions(+)
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)) {
-- 
2.33.0.96.g73915697e6
Previous: Taylor BlauNext: Junio C Hamano
Message 12 of 13 in “midx: clean up t5319 under 'SANITIZE=leak'”
  1. 0/9 midx: clean up t5319 under 'SANITIZE=leak'Taylor Blau, Oct 26, 2021
  2. 1/9 midx.c: clean up chunkfile after reading the MIDXTaylor Blau, Oct 26, 2021
  3. 2/9 midx.c: don't leak MIDX from verify_midx_fileTaylor Blau, Oct 26, 2021
  4. 3/9 t/helper/test-read-midx.c: free MIDX within read_midx_file()Taylor Blau, Oct 26, 2021
  5. 4/9 builtin/pack-objects.c: don't leak memory via argumentsTaylor Blau, Oct 26, 2021
  6. 5/9 builtin/repack.c: avoid leaking child argumentsTaylor Blau, Oct 26, 2021
  7. Junio C HamanoOct 27, 2021
  8. Taylor BlauOct 28, 2021
  9. 6/9 builtin/multi-pack-index.c: don't leak concatenated optionsTaylor Blau, Oct 26, 2021
  10. 7/9 midx.c: write MIDX filenames to strbufTaylor Blau, Oct 26, 2021
  11. 8/9 pack-bitmap.c: don't leak type-level bitmapsTaylor Blau, Oct 26, 2021
  12. 9/9 pack-bitmap.c: more aggressively free in free_bitmap_index()Taylor Blau, Oct 26, 2021
  13. Junio C HamanoOct 27, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.