diff options
author | Luca Milanesio <luca.milanesio@gmail.com> | 2023-06-08 00:25:07 +0100 |
---|---|---|
committer | Luca Milanesio <luca.milanesio@gmail.com> | 2023-06-08 00:25:12 +0100 |
commit | b77fdf6df4d8efc850ac252d88813928999ec0b7 (patch) | |
tree | 84b47c0defc76bcb0d0de56fee75174441816ac5 /org.eclipse.jgit | |
parent | 9932f9b4156349252d3516a06298e3db708f4d5a (diff) | |
parent | 42d201f46c6de3374bca6c5ccddc2e7721956696 (diff) | |
download | jgit-b77fdf6df4d8efc850ac252d88813928999ec0b7.tar.gz jgit-b77fdf6df4d8efc850ac252d88813928999ec0b7.zip |
Merge branch 'stable-6.1' into stable-6.2
* stable-6.1:
Revert "RefDirectory: Throw exception if CAS of packed ref list fails"
Change-Id: I1a98e293ef10917b2d8ad64e88be9e82c7bcf693
Signed-off-by: Luca Milanesio <luca.milanesio@gmail.com>
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java | 17 |
1 files changed, 1 insertions, 16 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java index aa910d845c..d72f935555 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java @@ -1052,22 +1052,7 @@ public class RefDirectory extends RefDatabase { byte[] digest = Constants.newMessageDigest().digest(content); PackedRefList newPackedList = new PackedRefList( refs, lck.getCommitSnapshot(), ObjectId.fromRaw(digest)); - - // This thread holds the file lock, so no other thread or process should - // be able to modify the packed-refs file on disk. If the list changed, - // it means something is very wrong, so throw an exception. - // - // However, we can't use a naive compareAndSet to check whether the - // update was successful, because another thread might _read_ the - // packed refs file that was written out by this thread while holding - // the lock, and update the packedRefs reference to point to that. So - // compare the actual contents instead. - PackedRefList afterUpdate = packedRefs.updateAndGet( - p -> p.id.equals(oldPackedList.id) ? newPackedList : p); - if (!afterUpdate.id.equals(newPackedList.id)) { - throw new ObjectWritingException( - MessageFormat.format(JGitText.get().unableToWrite, name)); - } + packedRefs.compareAndSet(oldPackedList, newPackedList); if (changed) { modCnt.incrementAndGet(); } |