|
|
|
|
|
|
|
|
import java.util.Map; |
|
|
import java.util.Map; |
|
|
import java.util.Set; |
|
|
import java.util.Set; |
|
|
import java.util.TreeSet; |
|
|
import java.util.TreeSet; |
|
|
|
|
|
import java.util.concurrent.locks.Lock; |
|
|
import java.util.concurrent.locks.ReentrantLock; |
|
|
import java.util.concurrent.locks.ReentrantLock; |
|
|
|
|
|
|
|
|
import org.eclipse.jgit.annotations.Nullable; |
|
|
import org.eclipse.jgit.annotations.Nullable; |
|
|
|
|
|
|
|
|
reftableDatabase = new ReftableDatabase() { |
|
|
reftableDatabase = new ReftableDatabase() { |
|
|
@Override |
|
|
@Override |
|
|
public MergedReftable openMergedReftable() throws IOException { |
|
|
public MergedReftable openMergedReftable() throws IOException { |
|
|
DfsReftableDatabase.this.getLock().lock(); |
|
|
|
|
|
|
|
|
Lock l = DfsReftableDatabase.this.getLock(); |
|
|
|
|
|
l.lock(); |
|
|
try { |
|
|
try { |
|
|
return new MergedReftable(stack().readers()); |
|
|
return new MergedReftable(stack().readers()); |
|
|
} finally { |
|
|
} finally { |
|
|
DfsReftableDatabase.this.getLock().unlock(); |
|
|
|
|
|
|
|
|
l.unlock(); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
void clearCache() { |
|
|
void clearCache() { |
|
|
getLock().lock(); |
|
|
|
|
|
|
|
|
ReentrantLock l = getLock(); |
|
|
|
|
|
l.lock(); |
|
|
try { |
|
|
try { |
|
|
if (ctx != null) { |
|
|
if (ctx != null) { |
|
|
ctx.close(); |
|
|
ctx.close(); |
|
|
|
|
|
|
|
|
stack = null; |
|
|
stack = null; |
|
|
} |
|
|
} |
|
|
} finally { |
|
|
} finally { |
|
|
getLock().unlock(); |
|
|
|
|
|
|
|
|
l.unlock(); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|