Skip to content

Commit 85f360f

Browse files
ttaylorrgitster
authored andcommitted
pack-bitmap: introduce bitmap_writer_free()
Now that there is clearer memory ownership around the bitmap_writer structure, introduce a bitmap_writer_free() function that callers may use to free any memory associated with their instance of the bitmap_writer structure. Signed-off-by: Taylor Blau <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent f25e1f2 commit 85f360f

File tree

4 files changed

+27
-1
lines changed

4 files changed

+27
-1
lines changed

builtin/pack-objects.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1245,7 +1245,6 @@ static void write_pack_file(void)
12451245
uint32_t nr_remaining = nr_result;
12461246
time_t last_mtime = 0;
12471247
struct object_entry **write_order;
1248-
struct bitmap_writer bitmap_writer;
12491248

12501249
if (progress > pack_to_stdout)
12511250
progress_state = start_progress(_("Writing objects"), nr_result);
@@ -1315,6 +1314,7 @@ static void write_pack_file(void)
13151314
if (!pack_to_stdout) {
13161315
struct stat st;
13171316
struct strbuf tmpname = STRBUF_INIT;
1317+
struct bitmap_writer bitmap_writer;
13181318
char *idx_tmp_name = NULL;
13191319

13201320
/*
@@ -1370,6 +1370,7 @@ static void write_pack_file(void)
13701370
bitmap_writer_finish(&bitmap_writer,
13711371
written_list, nr_written,
13721372
tmpname.buf, write_bitmap_options);
1373+
bitmap_writer_free(&bitmap_writer);
13731374
write_bitmap_index = 0;
13741375
strbuf_setlen(&tmpname, tmpname_len);
13751376
}

midx-write.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -853,6 +853,7 @@ static int write_midx_bitmap(const char *midx_name,
853853
cleanup:
854854
free(index);
855855
free(bitmap_name);
856+
bitmap_writer_free(&writer);
856857

857858
trace2_region_leave("midx", "write_midx_bitmap", the_repository);
858859

pack-bitmap-write.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,29 @@ void bitmap_writer_init(struct bitmap_writer *writer)
3232
memset(writer, 0, sizeof(struct bitmap_writer));
3333
}
3434

35+
void bitmap_writer_free(struct bitmap_writer *writer)
36+
{
37+
uint32_t i;
38+
39+
if (!writer)
40+
return;
41+
42+
ewah_free(writer->commits);
43+
ewah_free(writer->trees);
44+
ewah_free(writer->blobs);
45+
ewah_free(writer->tags);
46+
47+
kh_destroy_oid_map(writer->bitmaps);
48+
49+
for (i = 0; i < writer->selected_nr; i++) {
50+
struct bitmapped_commit *bc = &writer->selected[i];
51+
if (bc->write_as != bc->bitmap)
52+
ewah_free(bc->write_as);
53+
ewah_free(bc->bitmap);
54+
}
55+
free(writer->selected);
56+
}
57+
3558
void bitmap_writer_show_progress(struct bitmap_writer *writer, int show)
3659
{
3760
writer->show_progress = show;

pack-bitmap.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ void bitmap_writer_finish(struct bitmap_writer *writer,
139139
uint32_t index_nr,
140140
const char *filename,
141141
uint16_t options);
142+
void bitmap_writer_free(struct bitmap_writer *writer);
142143
char *midx_bitmap_filename(struct multi_pack_index *midx);
143144
char *pack_bitmap_filename(struct packed_git *p);
144145

0 commit comments

Comments
 (0)