From bfb25cd97ce21f511f8bcbcff57c11aade502d5b Mon Sep 17 00:00:00 2001 From: NAKAMURA Takumi Date: Wed, 16 Mar 2011 02:53:24 +0000 Subject: [PATCH] Windows/Path.inc: [PR6270] PathV1::makeUnique(): Give arbitrary initial seed for workaround. 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 | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/Support/Windows/Path.inc b/lib/Support/Windows/Path.inc index f4b7cec2a11..42a92f9c6df 100644 --- a/lib/Support/Windows/Path.inc +++ b/lib/Support/Windows/Path.inc @@ -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) -- 2.34.1