On Fri, Jun 23, 2017 at 09:01:46AM +0200, Michael Haggerty wrote:

> Change `repack_without_refs()` to expect the packed-refs lock to be
> held already, and not to release the lock before returning. Change the
> callers to deal with lock management.
> 
> This change makes it possible for callers to hold the packed-refs lock
> for a longer span of time, a possibility that will eventually make it
> possible to fix some longstanding races.

This is the sort of clue I was thinking about in my last email. :)

> The only semantic change here is that `repack_without_refs()` used to
> forgot to release the lock in the `if (!removed)` exit path. That
> omission is now fixed.

s/used to forgot/previously forgot/ or similar?

> @@ -731,14 +717,12 @@ int repack_without_refs(struct ref_store *ref_store,
>                * All packed entries disappeared while we were
>                * acquiring the lock.
>                */
> -             rollback_packed_refs(refs);
> +             clear_packed_ref_cache(refs);
>               return 0;

And this is the reason for the earlier "you should be able to clear the
packed ref cache without holding the lock" commit, I guess. Makes sense.

-Peff

Reply via email to