On Wed, Aug 07, 2024 at 05:01:17PM +1000, James Liu wrote: > On Tue Aug 6, 2024 at 7:00 PM AEST, Patrick Steinhardt wrote: > > Refactor the code to have a common exit path where we can free this and > > other allocated memory. While at it, refactor our use of `strbuf`s such > > that we reuse the same buffer to avoid some unneeded allocations. > > > > @@ -3105,7 +3117,14 @@ static int do_write_index(struct index_state *istate, struct tempfile *tempfile, > > trace2_data_intmax("index", the_repository, "write/cache_nr", > > istate->cache_nr); > > > > - return 0; > > + ret = 0; > > + > > +out: > > + if (f) > > + free_hashfile(f); > > + strbuf_release(&sb); > > + free(ieot); > > + return ret; > > } > > Is it generally a pattern in Git to use `goto <label>` instead of > returns when there are multiple return points in a function? We're also > performing cleanup duties here and in most of those scenarios but there > are some cases like `reftable_be_pack_refs()` where the goto simply > collapses multiple return points into a single path. Yes, that's usually how we avoid repetetive cleanup code for each of the return paths. `reftable_be_pack_refs()` is a bit more on the curious side as the common exit path doesn't really do helpful. That one could have just as well used plain returns. Patrick
Attachment:
signature.asc
Description: PGP signature