]> source.dussan.org Git - jgit.git/commitdiff
Fix inProcessPackedRefsLock not shared with copies of the instance 82/201682/2
authorNasser Grainawi <quic_nasserg@quicinc.com>
Tue, 2 May 2023 22:30:44 +0000 (16:30 -0600)
committerNasser Grainawi <quic_nasserg@quicinc.com>
Tue, 2 May 2023 23:14:52 +0000 (17:14 -0600)
The in process lock is intended to manage contention on locking the
packed-refs file within a single process without acquiring the file
system lock. Not sharing it across RefDirectory instances of the same
repository undermines that intent and results in more contention at the
file system level.

Change-Id: I68f11856aa0b4b1524f43554d7391a322a0a6897
Signed-off-by: Nasser Grainawi <quic_nasserg@quicinc.com>
org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java

index 0416a648e5a9c1eddb708b8b4e0ff457c2da4749..f0676d9beca523e02fd63d54840f5be12d636c52 100644 (file)
@@ -155,7 +155,7 @@ public class RefDirectory extends RefDatabase {
         * {@code RepositoryCache} is used, this lock instance will be used by all
         * threads.
         */
-       final ReentrantLock inProcessPackedRefsLock = new ReentrantLock(true);
+       final ReentrantLock inProcessPackedRefsLock;
 
        /**
         * Number of modifications made to this database.
@@ -190,6 +190,7 @@ public class RefDirectory extends RefDatabase {
                packedRefs.set(refDb.packedRefs.get());
                trustFolderStat = refDb.trustFolderStat;
                trustPackedRefsStat = refDb.trustPackedRefsStat;
+               inProcessPackedRefsLock = refDb.inProcessPackedRefsLock;
        }
 
        RefDirectory(FileRepository db) {
@@ -210,6 +211,7 @@ public class RefDirectory extends RefDatabase {
                                .getEnum(ConfigConstants.CONFIG_CORE_SECTION, null,
                                                ConfigConstants.CONFIG_KEY_TRUST_PACKED_REFS_STAT,
                                                TrustPackedRefsStat.UNSET);
+               inProcessPackedRefsLock = new ReentrantLock(true);
        }
 
        Repository getRepository() {