On Fri, Feb 24, 2023 at 03:09:58AM -0500, Jeff King wrote: > + for (p = get_worktrees(); *p; p++) { > + struct worktree *wt = *p; > + struct index_state istate = > + INDEX_STATE_INIT(the_repository); > + > + if (read_index_from(&istate, > + worktree_git_path(wt, "index"), > + get_worktree_git_dir(wt)) > 0) > + fsck_index(&istate); > + discard_index(&istate); > + } I didn't realize that get_worktrees() returns an allocated array, so this is a small leak. I'll squash this in locally: diff --git a/builtin/fsck.c b/builtin/fsck.c index ddd13cb2b3..c11cb2a95f 100644 --- a/builtin/fsck.c +++ b/builtin/fsck.c @@ -984,12 +984,13 @@ int cmd_fsck(int argc, const char **argv, const char *prefix) } if (keep_cache_objects) { - struct worktree **p; + struct worktree **worktrees, **p; verify_index_checksum = 1; verify_ce_order = 1; - for (p = get_worktrees(); *p; p++) { + worktrees = get_worktrees(); + for (p = worktrees; *p; p++) { struct worktree *wt = *p; struct index_state istate = INDEX_STATE_INIT(the_repository); @@ -1000,7 +1001,7 @@ int cmd_fsck(int argc, const char **argv, const char *prefix) fsck_index(&istate); discard_index(&istate); } - + free_worktrees(worktrees); } check_connectivity(); but I'll hold off for other comments before sending a re-roll. -Peff