[llvm] r203137 - [Support/LockFileManager] Use symbolic link for the lock file.

Argyrios Kyrtzidis akyrtzi at gmail.com
Thu Mar 6 09:37:05 PST 2014


Author: akirtzidis
Date: Thu Mar  6 11:37:04 2014
New Revision: 203137

URL: http://llvm.org/viewvc/llvm-project?rev=203137&view=rev
Log:
[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

Modified:
    llvm/trunk/lib/Support/LockFileManager.cpp

Modified: llvm/trunk/lib/Support/LockFileManager.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/LockFileManager.cpp?rev=203137&r1=203136&r2=203137&view=diff
==============================================================================
--- llvm/trunk/lib/Support/LockFileManager.cpp (original)
+++ llvm/trunk/lib/Support/LockFileManager.cpp Thu Mar  6 11:37:04 2014
@@ -115,24 +115,15 @@ LockFileManager::LockFileManager(StringR
     }
   }
 
-  // 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());





More information about the llvm-commits mailing list