def err_module_not_built : Error<"could not build module '%0'">, DefaultFatal;
def err_module_lock_failure : Error<
"could not acquire lock file for module '%0'">, DefaultFatal;
+def err_module_lock_timeout : Error<
+ "timed out waiting to acquire lock file for module '%0'">, DefaultFatal;
def err_module_cycle : Error<"cyclic dependency in module '%0': %1">,
DefaultFatal;
def note_pragma_entered_here : Note<"#pragma entered here">;
case llvm::LockFileManager::LFS_Shared:
// Someone else is responsible for building the module. Wait for them to
// finish.
- if (Locked.waitForUnlock() == llvm::LockFileManager::Res_OwnerDied)
+ switch (Locked.waitForUnlock()) {
+ case llvm::LockFileManager::Res_Success:
+ ModuleLoadCapabilities |= ASTReader::ARR_OutOfDate;
+ break;
+ case llvm::LockFileManager::Res_OwnerDied:
continue; // try again to get the lock.
- ModuleLoadCapabilities |= ASTReader::ARR_OutOfDate;
+ case llvm::LockFileManager::Res_Timeout:
+ Diags.Report(ModuleNameLoc, diag::err_module_lock_timeout)
+ << Module->Name;
+ // Clear the lock file so that future invokations can make progress.
+ Locked.unsafeRemoveLockFile();
+ return false;
+ }
break;
}