git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 3/3] Revert "pack-objects: lazily set up "struct rev_info", don't leak"

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Nov 28, 2022, 11:12 UTC
Message-ID
<221128.868rjvmi3l.gmgdl@evledraar.gmail.com>
In-Reply-To
<xmqqv8mz5ras.fsf@gitster.g>
On Mon, Nov 28 2022, Junio C Hamano wrote:
Show 17 quoted lines
> René Scharfe <l.s.r@web.de> writes:
>
>> This reverts commit 5cb28270a1ff94a0a23e67b479bbbec3bc993518.
>>
>> 5cb28270a1 (pack-objects: lazily set up "struct rev_info", don't leak,
>> 2022-03-28) avoided leaking rev_info allocations in many cases by
>> calling repo_init_revisions() only when the .filter member was actually
>> needed, but then still leaking it.  That was fixed later by 2108fe4a19
>> (revisions API users: add straightforward release_revisions(),
>> 2022-04-13), making the reverted commit unnecessary.
>
> Hmph, with this merged, 'seen' breaks linux-leaks job in a strange
> way.
>
> https://github.com/git/git/actions/runs/3563546608/jobs/5986458300#step:5:3917
>
> Does anybody want to help looking into it?

It's because the tip of that branch introduces a new leak, but it's only revealed in our test suite by a "git" invocation that we don't check the exit code of. So testing with "GIT_TEST_SANITIZE_LEAK_LOG=true" (which is there to check exactly those edge cases) catches it.

René, testing locally with e.g.:
	GIT_TEST_PASSING_SANITIZE_LEAK=check \
	GIT_TEST_SANITIZE_LEAK_LOG=true \
	make test

Should catch it, but note that we might still have new leaks in tests that are already failing due to other leaks. So diff-ing the resulting t/test-results/*.leak/* would be a good sanity check to see if there's any other leak we've missed.

As to the bug itself: This exact edge case is why I went for the lazy-setup part of 5cb28270a1f (pack-objects: lazily set up "struct rev_info", don't leak, 2022-03-28), and indeed the example mentioned in its commit message now leaks again, but not on master:

	echo e83c5163316f89bfbde7d9ab23ca2e25604af290 | ./git pack-objects initial

Now, maybe I'm missing something, but it the tip of that branch points out a legitimate bug in my 5cb28270a1f.

But I don't see why the fix for it needs to be a full revert of
5cb28270a1f. If I replace all the C code changes in that commit with
this the test it flipped also passes:
	
	diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
	index 573d0b20b76..0de53c5a2df 100644
	--- a/builtin/pack-objects.c
	+++ b/builtin/pack-objects.c
	@@ -4158,8 +4158,10 @@ static struct list_objects_filter_options *po_filter_revs_init(void *value)
	 {
	 	struct po_filter_data *data = value;
	 
	-	repo_init_revisions(the_repository, &data->revs, NULL);
	-	data->have_revs = 1;
	+	if (!data->have_revs) {
	+		repo_init_revisions(the_repository, &data->revs, NULL);
	+		data->have_revs = 1;
	+	}
	 
	 	return &data->revs.filter;
	 }

I.e. the commit is correct that we shouldn't be clobbering the "rev_info" when we see --filter again, but then let's just stop doing that.

Well, I know why, it's because René initially started poking at this to rid the codebase of the reliance of C99's J.5.7. I think our two opinions on that are quite clear, so I won't repeat that here (I don't per-se mind, I just think it's a nothingburger).

But in any case, if we're going to also refactor this code to get rd of the J.5.7 reliance I'd think we could agree that it really belongs in its own change. That change could then be a pure refactoring change, and wouldn't need to also explain how it's fixing a bug while-at-it.

Previous: Ævar Arnfjörð BjarmasonNext: Ævar Arnfjörð Bjarmason
Message 37 of 52 in “pack-objects: fix and simplify --filter handling”
  1. 0/3 pack-objects: fix and simplify --filter handlingRené Scharfe, Nov 12, 2022
  2. 1/3 pack-objects: fix handling of multiple --filter optionsRené Scharfe, Nov 12, 2022
  3. Ævar Arnfjörð BjarmasonNov 12, 2022
  4. René ScharfeNov 13, 2022
  5. Jeff KingNov 12, 2022
  6. Taylor BlauNov 13, 2022
  7. Jeff KingNov 13, 2022
  8. René ScharfeNov 13, 2022
  9. 2/3 pack-object: simplify --filter handlingRené Scharfe, Nov 12, 2022
  10. Ævar Arnfjörð BjarmasonNov 12, 2022
  11. Jeff KingNov 12, 2022
  12. Jeff KingNov 13, 2022
  13. René ScharfeNov 13, 2022
  14. 3/3 list-objects-filter: remove OPT_PARSE_LIST_OBJECTS_FILTER_INIT()René Scharfe, Nov 12, 2022
  15. 0/3 pack-objects: fix and simplify --filter handlingRené Scharfe, Nov 20, 2022
  16. 2/3 t5317: demonstrate failure to handle multiple --filter optionsRené Scharfe, Nov 20, 2022
  17. 1/3 t5317: stop losing return codes of git ls-filesRené Scharfe, Nov 20, 2022
  18. 3/3 Revert "pack-objects: lazily set up "struct rev_info", don't leak"René Scharfe, Nov 20, 2022
  19. Junio C HamanoNov 28, 2022
  20. René ScharfeNov 28, 2022
  21. Ævar Arnfjörð BjarmasonNov 28, 2022
  22. Ævar Arnfjörð BjarmasonNov 28, 2022
  23. René ScharfeNov 28, 2022
  24. Ævar Arnfjörð BjarmasonNov 28, 2022
  25. René ScharfeNov 28, 2022
  26. Ævar Arnfjörð BjarmasonNov 28, 2022
  27. René ScharfeNov 28, 2022
  28. René ScharfeNov 28, 2022
  29. Ævar Arnfjörð BjarmasonNov 28, 2022
  30. René ScharfeNov 28, 2022
  31. Jeff KingNov 29, 2022
  32. Junio C HamanoNov 29, 2022
  33. Ævar Arnfjörð BjarmasonNov 29, 2022
  34. Ævar Arnfjörð BjarmasonNov 29, 2022
  35. René ScharfeNov 29, 2022
  36. Ævar Arnfjörð BjarmasonNov 28, 2022
  37. Ævar Arnfjörð BjarmasonNov 28, 2022
  38. t5314: check exit code of "rev-parse"Ævar Arnfjörð Bjarmason, Nov 28, 2022
  39. René ScharfeNov 28, 2022
  40. t5314: check exit code of "git"Ævar Arnfjörð Bjarmason, Nov 28, 2022
  41. Jeff KingNov 22, 2022
  42. 0/5 pack-objects: fix and simplify --filter handlingRené Scharfe, Nov 29, 2022
  43. 1/5 t5317: stop losing return codes of git ls-filesRené Scharfe, Nov 29, 2022
  44. 2/5 t5317: demonstrate failure to handle multiple --filter optionsRené Scharfe, Nov 29, 2022
  45. 3/5 pack-objects: fix handling of multiple --filter optionsRené Scharfe, Nov 29, 2022
  46. Junio C HamanoNov 30, 2022
  47. René ScharfeNov 30, 2022
  48. 4/5 pack-objects: simplify --filter handlingRené Scharfe, Nov 29, 2022
  49. Ævar Arnfjörð BjarmasonNov 29, 2022
  50. René ScharfeNov 30, 2022
  51. 5/5 list-objects-filter: remove OPT_PARSE_LIST_OBJECTS_FILTER_INIT()René Scharfe, Nov 29, 2022
  52. Junio C HamanoNov 30, 2022

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.