Windows/Path.inc: [PR6270] PathV1::makeUnique(): Give arbitrary initial seed for...
authorNAKAMURA Takumi <geek4civic@gmail.com>
Wed, 16 Mar 2011 02:53:24 +0000 (02:53 +0000)
committerNAKAMURA Takumi <geek4civic@gmail.com>
Wed, 16 Mar 2011 02:53:24 +0000 (02:53 +0000)
FIXME: We should use sys::fs::unique_file() in future.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127723 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Support/Windows/Path.inc

index f4b7cec2a11d34143f6cc4528ae7acc982b34049..42a92f9c6dfee8e7f0e980b470bad62e9934edc8 100644 (file)
@@ -882,7 +882,17 @@ Path::makeUnique(bool reuse_current, std::string* ErrMsg) {
   // Find a numeric suffix that isn't used by an existing file.  Assume there
   // won't be more than 1 million files with the same prefix.  Probably a safe
   // bet.
-  static unsigned FCounter = 0;
+  static int FCounter = -1;
+  if (FCounter < 0) {
+    // Give arbitrary initial seed.
+    // FIXME: We should use sys::fs::unique_file() in future.
+    LARGE_INTEGER cnt64;
+    DWORD x = GetCurrentProcessId();
+    x = (x << 16) | (x >> 16);
+    if (QueryPerformanceCounter(&cnt64))    // RDTSC
+      x ^= cnt64.HighPart ^ cnt64.LowPart;
+    FCounter = x % 1000000;
+  }
   do {
     sprintf(FNBuffer+offset, "-%06u", FCounter);
     if (++FCounter > 999999)