Merge "PackedBatchRefUpdate: hold inProcessPackedRefsLock across pack step"
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackedBatchRefUpdate.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackedBatchRefUpdate.java
index f33fe0b..cd03600 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackedBatchRefUpdate.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackedBatchRefUpdate.java
@@ -146,20 +146,15 @@ public void execute(RevWalk walk, ProgressMonitor monitor,
return;
}
- // Pack refs normally, so we can create lock files even in the case where
- // refs/x is deleted and refs/x/y is created in this batch.
- try {
- refdb.pack(
- pending.stream().map(ReceiveCommand::getRefName).collect(toList()));
- } catch (LockFailedException e) {
- lockFailure(pending.get(0), pending);
- return;
- }
-
Map<String, LockFile> locks = null;
LockFile packedRefsLock = null;
refdb.inProcessPackedRefsLock.lock();
try {
+ // Pack refs normally, so we can create lock files even in the case
+ // where refs/x is deleted and refs/x/y is created in this batch.
+ refdb.pack(pending.stream().map(ReceiveCommand::getRefName)
+ .collect(toList()));
+
// During clone locking isn't needed since no refs exist yet.
// This also helps to avoid problems with refs only differing in
// case on a case insensitive filesystem (bug 528497)