Show 68 quoted lines
> On Wed, Aug 05, 2020 at 02:01:29PM -0700, Junio C Hamano wrote:
>> Taylor Blau <me@ttaylorr.com> writes:
>>
>> > @@ -71,6 +72,10 @@ struct commit_graph {
>> > const unsigned char *chunk_base_graphs;
>> > const unsigned char *chunk_bloom_indexes;
>> > const unsigned char *chunk_bloom_data;
>> > + const unsigned char *chunk_bloom_large_filters;
>> > +
>> > + size_t bloom_large_to_alloc;
>> > + struct bitmap bloom_large;
>>
>> Hmph, is the API rich enough to allow users to release the resource
>> used by such an embedded bitmap? I ask becuase...
>>
>> > @@ -2503,6 +2577,7 @@ void free_commit_graph(struct commit_graph *g)
>> > }
>> > free(g->filename);
>> > free(g->bloom_filter_settings);
>> > + bitmap_free(g->bloom_large);
>> > free(g);
>> > }
>>
>> ... this hunk cannot be possibly correct as-is, and cannot be made
>> correct without changing g->bloom_large to a pointer into a heap
>> allocated bitmap, because bitmap_free() wants to not just release
>> the resource held by the bitmap but the bitmap itself.
>
> Yuck, that's definitely wrong. Serves me right for sneaking this in
> after I had run `git rebase -x 'make -j40 DEVELOPER=1 test'
> upstream/master` ;-).
>
> Below the scissors line should do the trick. It should apply cleanly at
> this point in the series, but it'll produce a compilation failure on the
> very last patch (fixing it is straightforward and looks like the
> following diff):
>
> diff --git a/bloom.c b/bloom.c
> index d0c0fd049d..8d07209c6b 100644
> --- a/bloom.c
> +++ b/bloom.c
> @@ -52,7 +52,7 @@ static int load_bloom_filter_from_graph(struct commit_graph *g,
> start_index = 0;
>
> if ((start_index == end_index) &&
> - (g->bloom_large.word_alloc && !bitmap_get(&g->bloom_large, lex_pos))) {
> + (g->bloom_large && !bitmap_get(g->bloom_large, lex_pos))) {
> /*
> * If the filter is zero-length, either (1) the filter has no
> * changes, (2) the filter has too many changes, or (3) it
>
> In either case, this will fix the bad free():
>
> --- >8 ---
>
> Subject: [PATCH] fixup! commit-graph: add large-filters bitmap chunk
>
> Signed-off-by: Taylor Blau <me@ttaylorr.com>
> ---
> commit-graph.c | 18 ++++++++++--------
> commit-graph.h | 2 +-
> 2 files changed, 11 insertions(+), 9 deletions(-)
> ...
> @@ -2360,6 +2361,7 @@ int write_commit_graph(struct object_directory *odb,
> free(ctx->graph_name);
> free(ctx->commits.list);
> free(ctx->oids.list);
> + free(ctx->bloom_large);