Merge "LockFile.commit: retry renaming"

This commit is contained in:
Shawn Pearce 2010-12-06 18:55:18 -05:00 committed by Code Review
commit 6462be8350
1 changed files with 20 additions and 1 deletions

View File

@ -397,7 +397,7 @@ public boolean commit() {
if (lck.renameTo(ref))
return true;
if (!ref.exists() || deleteRef())
if (lck.renameTo(ref))
if (renameLock())
return true;
unlock();
return false;
@ -422,6 +422,25 @@ private boolean deleteRef() {
return false;
}
private boolean renameLock() {
if (!fs.retryFailedLockFileCommit())
return lck.renameTo(ref);
// File renaming fails on windows if another thread is
// concurrently reading the same file. So try a few times.
//
for (int attempts = 0; attempts < 10; attempts++) {
if (lck.renameTo(ref))
return true;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
return false;
}
}
return false;
}
private void saveStatInformation() {
if (needStatInformation)
commitLastModified = lck.lastModified();