[llvm-commits] [llvm] r114320 - /llvm/trunk/lib/System/Win32/Path.inc

Francois Pichet pichet2000 at gmail.com
Sun Sep 19 21:03:07 PDT 2010


Author: fpichet
Date: Sun Sep 19 23:03:07 2010
New Revision: 114320

URL: http://llvm.org/viewvc/llvm-project?rev=114320&view=rev
Log:
Fix the "unable to rename temporary" lit test failing on Windows. rename is now copy + delete on Windows. Problem to be revisited for a permanent and clean solution.

Modified:
    llvm/trunk/lib/System/Win32/Path.inc

Modified: llvm/trunk/lib/System/Win32/Path.inc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/System/Win32/Path.inc?rev=114320&r1=114319&r2=114320&view=diff
==============================================================================
--- llvm/trunk/lib/System/Win32/Path.inc (original)
+++ llvm/trunk/lib/System/Win32/Path.inc Sun Sep 19 23:03:07 2010
@@ -745,12 +745,19 @@
   return true;
 }
 
+// Implements renamePathOnDisk as a CopyFile + eraseFromDisk on Windows.
+// Using MoveFileEx was causing mysterious ACCESS_DENIED error when used
+// within a multithreaded lit/python context.
+// FIXME: put back MoveFileEx when the source of the problem is resolved.
 bool
 Path::renamePathOnDisk(const Path& newName, std::string* ErrMsg) {
-  if (!MoveFileEx(path.c_str(), newName.c_str(), MOVEFILE_REPLACE_EXISTING))
-    return MakeErrMsg(ErrMsg, "Can't move '" + path + "' to '" + newName.path
-        + "': ");
-  return false;
+  if (*this == newName)
+    return false;
+  
+  if (CopyFile(newName, *this, ErrMsg))
+    return true;
+  
+  return eraseFromDisk(true, ErrMsg);
 }
 
 bool





More information about the llvm-commits mailing list