Merge branch 'stable-6.2' into stable-6.3
* stable-6.2: If tryLock fails to get the lock another gc has it Fix GcConcurrentTest#testInterruptGc Don't swallow IOException in GC.PidLock#lock Check if FileLock is valid before using or releasing it Change-Id: I5b6b10622b61fde3f0f10455a74ae159a0b69082
This commit is contained in:
commit
636f377e4e
|
@ -14,10 +14,10 @@
|
|||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.channels.ClosedByInterruptException;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.concurrent.BrokenBarrierException;
|
||||
|
@ -226,10 +226,8 @@ public void testInterruptGc() throws Exception {
|
|||
if (cause instanceof CancelledException) {
|
||||
assertEquals(JGitText.get().operationCanceled,
|
||||
cause.getMessage());
|
||||
} else if (cause instanceof IOException) {
|
||||
Throwable cause2 = cause.getCause();
|
||||
assertTrue(cause2 instanceof InterruptedException
|
||||
|| cause2 instanceof ExecutionException);
|
||||
} else if (cause instanceof ClosedByInterruptException) {
|
||||
// thread was interrupted
|
||||
} else {
|
||||
fail("unexpected exception " + e);
|
||||
}
|
||||
|
|
|
@ -1631,7 +1631,7 @@ private class PidLock implements AutoCloseable {
|
|||
pidFile = repo.getDirectory().toPath().resolve(GC_PID);
|
||||
}
|
||||
|
||||
boolean lock() {
|
||||
boolean lock() throws IOException {
|
||||
if (Files.exists(pidFile)) {
|
||||
Instant mtime = FS.DETECTED
|
||||
.lastModifiedInstant(pidFile.toFile());
|
||||
|
@ -1649,8 +1649,8 @@ boolean lock() {
|
|||
f = new RandomAccessFile(pidFile.toFile(), "rw"); //$NON-NLS-1$
|
||||
channel = f.getChannel();
|
||||
lock = channel.tryLock();
|
||||
if (lock == null) {
|
||||
failedToLock();
|
||||
if (lock == null || !lock.isValid()) {
|
||||
gcAlreadyRunning();
|
||||
return false;
|
||||
}
|
||||
channel.write(ByteBuffer
|
||||
|
@ -1670,7 +1670,7 @@ boolean lock() {
|
|||
JGitText.get().closePidLockFailed, pidFile),
|
||||
e1);
|
||||
}
|
||||
return false;
|
||||
throw e;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -1728,7 +1728,7 @@ private String getHostName() {
|
|||
public void close() {
|
||||
boolean wasLocked = false;
|
||||
try {
|
||||
if (lock != null) {
|
||||
if (lock != null && lock.isValid()) {
|
||||
lock.release();
|
||||
wasLocked = true;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue