Merge branch 'jk/bloom-leak-fixes'
Various memory leaks in the Bloom-filter code paths that are exposed when running tests with the 'GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS=1' environment variable have been plugged. * jk/bloom-leak-fixes: line-log: drop extra copy of range with bloom filters revision: avoid leaking bloom keyvecs with multiple traversals bloom: make bloom-filter slab initialization idempotentmain
commit
0a4fb3105e
5
bloom.c
5
bloom.c
|
|
@ -16,6 +16,7 @@
|
|||
define_commit_slab(bloom_filter_slab, struct bloom_filter);
|
||||
|
||||
static struct bloom_filter_slab bloom_filters;
|
||||
static int bloom_filter_slab_initialized;
|
||||
|
||||
struct pathmap_hash_entry {
|
||||
struct hashmap_entry entry;
|
||||
|
|
@ -263,7 +264,10 @@ void add_key_to_filter(const struct bloom_key *key,
|
|||
|
||||
void init_bloom_filters(void)
|
||||
{
|
||||
if (bloom_filter_slab_initialized)
|
||||
return;
|
||||
init_bloom_filter_slab(&bloom_filters);
|
||||
bloom_filter_slab_initialized = 1;
|
||||
}
|
||||
|
||||
static void free_one_bloom_filter(struct bloom_filter *filter)
|
||||
|
|
@ -276,6 +280,7 @@ static void free_one_bloom_filter(struct bloom_filter *filter)
|
|||
void deinit_bloom_filters(void)
|
||||
{
|
||||
deep_clear_bloom_filter_slab(&bloom_filters, free_one_bloom_filter);
|
||||
bloom_filter_slab_initialized = 0;
|
||||
}
|
||||
|
||||
struct bloom_keyvec *bloom_keyvec_new(const char *path, size_t len,
|
||||
|
|
|
|||
|
|
@ -1141,8 +1141,7 @@ int line_log_process_ranges_arbitrary_commit(struct rev_info *rev, struct commit
|
|||
|
||||
if (range) {
|
||||
if (commit->parents && !bloom_filter_check(rev, commit, range)) {
|
||||
struct line_log_data *prange = line_log_data_copy(range);
|
||||
add_line_range(rev, commit->parents->item, prange);
|
||||
add_line_range(rev, commit->parents->item, range);
|
||||
clear_commit_line_range(rev, commit);
|
||||
} else if (commit->parents && commit->parents->next)
|
||||
changed = process_ranges_merge_commit(rev, commit, range);
|
||||
|
|
|
|||
|
|
@ -707,6 +707,8 @@ cleanup:
|
|||
|
||||
static void prepare_to_use_bloom_filter(struct rev_info *revs)
|
||||
{
|
||||
release_revisions_bloom_keyvecs(revs);
|
||||
|
||||
if (!revs->commits)
|
||||
return;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue