Patches 2-4 are the actual fixes where I teach some functions to always roll back the lock they're holding. Notably, these are all in "libgit". Patch 1 is a "while at it" to use locks on the stack instead of having them be static. Patch 5 removes code to roll back locks which are already rolled back. I've based this on maint. There's a conflict on pu, with c7d4394111 (sequencer: avoid using errno clobbered by rollback_lock_file(), 2018-02-11). The conflict resolution would be to take my version for the "could not lock HEAD"-hunk. Martin Martin Ågren (5): sequencer: make lockfiles non-static sequencer: always roll back lock in `do_recursive_merge()` merge-recursive: always roll back lock in `merge_recursive_generic()` merge: always roll back lock in `checkout_fast_forward()` sequencer: do not roll back lockfile unnecessarily merge-recursive.c | 4 +++- merge.c | 12 +++++++++--- sequencer.c | 32 ++++++++++++++------------------ 3 files changed, 26 insertions(+), 22 deletions(-) -- 2.16.2.246.ga4ee44448f