From 7b95c0d529c9160b6678a14e2f8885d1cf08cd4f Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Thu, 6 Mar 2014 17:37:04 +0000 Subject: [PATCH] [Support/LockFileManager] Use symbolic link for the lock file. Hard links do not work on SMB network directories, and it causes us to fail to build clang module files if the module cache is in such a directory. rdar://15944959 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203137 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/LockFileManager.cpp | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/lib/Support/LockFileManager.cpp b/lib/Support/LockFileManager.cpp index 61afb79fb22..acb310efeec 100644 --- a/lib/Support/LockFileManager.cpp +++ b/lib/Support/LockFileManager.cpp @@ -115,24 +115,15 @@ LockFileManager::LockFileManager(StringRef FileName) } } - // Create a hard link from the lock file name. If this succeeds, we're done. + // Create a symbolic link from the lock file name. If this succeeds, we're done. + // Note that we are using symbolic link because hard links are not supported + // by all filesystems. error_code EC - = sys::fs::create_hard_link(UniqueLockFileName.str(), + = sys::fs::create_symbolic_link(UniqueLockFileName.str(), LockFileName.str()); if (EC == errc::success) return; - // Creating the hard link failed. - -#ifdef LLVM_ON_UNIX - // The creation of the hard link may appear to fail, but if stat'ing the - // unique file returns a link count of 2, then we can still declare success. - struct stat StatBuf; - if (stat(UniqueLockFileName.c_str(), &StatBuf) == 0 && - StatBuf.st_nlink == 2) - return; -#endif - // Someone else managed to create the lock file first. Wipe out our unique // lock file (it's useless now) and read the process ID from the lock file. sys::fs::remove(UniqueLockFileName.str()); -- 2.11.0