On Wed, Dec 1, 2021 at 7:13 PM Eric Sunshine <sunshine@xxxxxxxxxxxxxx> wrote: > If we instead hoist ownership of `worktrees` up to execute_commands() > -- which calls execute_commands_atomic() or > execute_commands_non_atomic() -- then we can get by with retrieving > the worktrees just once, and all those noise changes in update() can > be dropped since it will no longer be responsible for allocating or > freeing `worktrees`. For instance: > > static void execute_commands(...) > { > struct worktree **worktrees; > ... > worktrees = get_worktrees(); > if (use_atomic) > execute_commands_atomic(commands, si, worktrees); > else > execute_commands_non_atomic(commands, si, worktrees); > free_worktrees(worktrees); > ... > } > > and then execute_commands_atomic() and execute_commands_non_atomic() > can pass `worktrees` along to update(). By the way, I wouldn't typically recommend this sort of change for public API since it probably exposes too much implementation detail to callers, but as these are all private (static) worker functions -- with very few callers, moreover -- I don't find it terribly worrying.