]> git.ipfire.org Git - thirdparty/git.git/commit - add-interactive.c
diff.[ch]: have diff_free() call clear_pathspec(opts.pathspec)
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Wed, 16 Feb 2022 10:56:28 +0000 (11:56 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 16 Feb 2022 21:50:13 +0000 (13:50 -0800)
commit244c27242f44e6b88e3a381c90bde08d134c274b
treeee55637e7619eafeecfd54ce294ad48ccefc01f0
parent4c53a8c20f8984adb226293a3ffd7b88c3f4ac1a
diff.[ch]: have diff_free() call clear_pathspec(opts.pathspec)

Have the diff_free() function call clear_pathspec(). Since the
diff_flush() function calls this all its callers can be simplified to
rely on it instead.

When I added the diff_free() function in e900d494dcf (diff: add an API
for deferred freeing, 2021-02-11) I simply missed this, or wasn't
interested in it. Let's consolidate this now. This means that any
future callers (and I've got revision.c in mind) that embed a "struct
diff_options" can simply call diff_free() instead of needing know that
it has an embedded pathspec.

This does fix a bunch of leaks, but I can't mark any test here as
passing under the SANITIZE=leak testing mode because in
886e1084d78 (builtin/: add UNLEAKs, 2017-10-01) an UNLEAK(rev) was
added, which plasters over the memory
leak. E.g. "t4011-diff-symlink.sh" would report fewer leaks with this
fix, but because of the UNLEAK() reports none.

I'll eventually loop around to removing that UNLEAK(rev) annotation as
I'll fix deeper issues with the revisions API leaking. This is one
small step on the way there, a new freeing function in revisions.c
will want to call this diff_free().

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
add-interactive.c
blame.c
builtin/reset.c
diff.c
notes-merge.c