commit-reach: fix memory leak in `ahead_behind()`

We use a priority queue in `ahead_behind()` to compute the ahead/behind count for commits. We may not iterate through all commits part of that queue though in case all of its entries are stale. Consequently, as we never make the effort to release the remaining commits, we end up leaking bit arrays that we have allocated for each of the contained commits. Plug this leak and mark the corresponding test as leak free. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed May 27, 2024 at 13:46 UTC ba9d029445e183d7c7dda75887cee1b5d6fee1d7
2 files changed +6
commit-reach.c
+4
@@ -1106,6 +1106,10 @@ void ahead_behind(struct repository *r,
1106
1107 /* STALE is used here, PARENT2 is used by insert_no_dup(). */
1108 repo_clear_commit_marks(r, PARENT2 | STALE);
1109 + while (prio_queue_peek(&queue)) {
1110 + struct commit *c = prio_queue_get(&queue);
1111 + free_bit_array(c);
1112 + }
1113 clear_bit_arrays(&bit_arrays);
1114 clear_prio_queue(&queue);
1115 }
t/t3203-branch-output.sh
+2
@@ -1,6 +1,8 @@
1 #!/bin/sh
2
3 test_description='git branch display tests'
4 +
5 +TEST_PASSES_SANITIZE_LEAK=true
6 . ./test-lib.sh
7 . "$TEST_DIRECTORY"/lib-terminal.sh
8