Subject: Re: [PATCH 5/5] branch: fix branch_checked_out() leaks

From: Junio C Hamano <[email-masked]>
Date: Mon, 13 Jun 2022 16:03:08 -0700

Derrick Stolee <[email-masked]> writes:

>  	while (worktrees[i]) {
> +		char *old;
>  		struct wt_status_state state = { 0 };
>  		struct worktree *wt = worktrees[i++];
>  
>  		if (wt->is_bare)
>  			continue;
>  
> -		if (wt->head_ref)
> -			strmap_put(&current_checked_out_branches,
> -				   wt->head_ref,
> -				   xstrdup(wt->path));
> +		if (wt->head_ref) {
> +			old = strmap_put(&current_checked_out_branches,
> +					 wt->head_ref,
> +					 xstrdup(wt->path));
> +			free(old);
> +		}

While it is equivalent to

			free(strmap_put(&current_checked_out_branches,
                        		wt->head_ref,
					xstrdup(wt->path)));

writing the "put the new one" and "discard the old one (if exists)"
as separate steps like the above does make it easier to follow, at
least to me.

Thanks.  Will queue.