]> git.ipfire.org Git - thirdparty/git.git/commitdiff
sparse-index: correctly free EWAH contents
authorPatrick Steinhardt <ps@pks.im>
Tue, 5 Nov 2024 06:17:38 +0000 (07:17 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 5 Nov 2024 06:37:56 +0000 (22:37 -0800)
While we free the `fsmonitor_dirty` member of `struct index_state`, we
do not free the contents of that EWAH. Do so by using `ewah_free()`
instead of `FREE_AND_NULL()`.

This leak is exposed by t7519, but plugging it alone does not make the
test suite pass.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
sparse-index.c

index 3d7f2164e25ee5e87b42bb37e27d195aab8e3901..2107840bfc56714ec4cbe31253035b063e363ed7 100644 (file)
@@ -2,6 +2,7 @@
 
 #include "git-compat-util.h"
 #include "environment.h"
+#include "ewah/ewok.h"
 #include "gettext.h"
 #include "name-hash.h"
 #include "read-cache-ll.h"
@@ -242,7 +243,8 @@ int convert_to_sparse(struct index_state *istate, int flags)
        cache_tree_update(istate, 0);
 
        istate->fsmonitor_has_run_once = 0;
-       FREE_AND_NULL(istate->fsmonitor_dirty);
+       ewah_free(istate->fsmonitor_dirty);
+       istate->fsmonitor_dirty = NULL;
        FREE_AND_NULL(istate->fsmonitor_last_update);
 
        istate->sparse_index = INDEX_COLLAPSED;
@@ -438,7 +440,8 @@ void expand_index(struct index_state *istate, struct pattern_list *pl)
        istate->cache_nr = full->cache_nr;
        istate->cache_alloc = full->cache_alloc;
        istate->fsmonitor_has_run_once = 0;
-       FREE_AND_NULL(istate->fsmonitor_dirty);
+       ewah_free(istate->fsmonitor_dirty);
+       istate->fsmonitor_dirty = NULL;
        FREE_AND_NULL(istate->fsmonitor_last_update);
 
        strbuf_release(&base);