Thread (1 message) 1 message, 1 author, 2022-03-24

Re: [PATCH v2 08/27] revisions API users: use release_revisions() needing "{ 0 }" init

From: Junio C Hamano <hidden>
Date: 2022-03-24 17:39:15

Ævar Arnfjörð Bjarmason [off-list ref] writes:
On Wed, Mar 23 2022, Junio C Hamano wrote:
quoted
Ævar Arnfjörð Bjarmason  [off-list ref] writes:
quoted
Use release_revisions() to various users of "struct rev_list" which
need to have their "struct rev_info" zero-initialized before we can
start using it. In all of these cases we might "goto cleanup" (or equivalent),
I didn't look at the bisect code, but the bundle one looks iffy from
the point of view of API cleanliness.  If we have not yet called
repo_init_revisions() on a revs, we should refrain from calling
release_revisions() on it in the first place, no?
It could be avoided, but I'd really prefer not to for this series.

repo_init_revisions() is a non-trivial function, and changing the
various bits in this series that can easily have a "goto" pattern
because we assume that { 0 }-init'd is safe to pass to
release_revisions() would be a larger change...

We assume that in a lot of other destructors throughout the codebase, I
figured we could leave this for later.

Is that OK with you?
Not really.  If you introduce "#define REV_INFO_INIT { 0 }",
perhaps, though.

Without such a mechanism to clearly say "here is what we initialize
a rev_info", the first call to repo_init_revisions() looks like the
place that initializes a rev_info, and call to release_revisions()
on a rev_info that did not go through repo_init_revisions() looks
like a call to free() of a pointer that hasn't been assigned the
result from an allocation from the heap.  That is where my "iffy
from the API cleanliness POV" comes from.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help