r228604 - Diagnose timeouts in the LockFileManager and delete the dead lock file
Richard Smith
richard at metafoo.co.uk
Tue Feb 24 18:57:11 PST 2015
On Mon, Feb 9, 2015 at 12:35 PM, Ben Langmuir <blangmuir at apple.com> wrote:
> Author: benlangmuir
> Date: Mon Feb 9 14:35:13 2015
> New Revision: 228604
>
> URL: http://llvm.org/viewvc/llvm-project?rev=228604&view=rev
> Log:
> Diagnose timeouts in the LockFileManager and delete the dead lock file
>
> If the lock file manager times out, we should give an error rather than
> silently trying to load the existing module. And delete the
> (presumably) dead lock file, since it will otherwise prevent progress in
> future invokations. This is unsound since we have no way to prove that
> the lock file we are deleting is the same one we timed out on, but since
> the lock is only to avoid excessive rebuilding anyway it should be okay.
> Depends on llvm r228603.
>
This diagnostic fires a *lot* when, say, bootstrapping Clang with modules
enabled at -j16. Is the timeout perhaps too short?
> Modified:
> cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td
> cfe/trunk/lib/Frontend/CompilerInstance.cpp
>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td?rev=228604&r1=228603&r2=228604&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticCommonKinds.td Mon Feb 9
> 14:35:13 2015
> @@ -83,6 +83,8 @@ def err_module_not_found : Error<"module
> 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">;
>
> Modified: cfe/trunk/lib/Frontend/CompilerInstance.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=228604&r1=228603&r2=228604&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Frontend/CompilerInstance.cpp (original)
> +++ cfe/trunk/lib/Frontend/CompilerInstance.cpp Mon Feb 9 14:35:13 2015
> @@ -1022,9 +1022,19 @@ static bool compileAndLoadModule(Compile
> 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;
> }
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150224/da0881c1/attachment.html>
More information about the cfe-commits
mailing list