[Lldb-commits] [PATCH] Use GUIDs to make pipe names unique on Windows.

Zachary Turner zturner at google.com
Wed Feb 11 10:23:31 PST 2015


REPOSITORY
  rL LLVM

http://reviews.llvm.org/D7509

Files:
  lldb/trunk/cmake/LLDBDependencies.cmake
  lldb/trunk/source/Host/windows/PipeWindows.cpp

Index: lldb/trunk/source/Host/windows/PipeWindows.cpp
===================================================================
--- lldb/trunk/source/Host/windows/PipeWindows.cpp
+++ lldb/trunk/source/Host/windows/PipeWindows.cpp
@@ -15,6 +15,7 @@
 
 #include <fcntl.h>
 #include <io.h>
+#include <rpc.h>
 
 #include <atomic>
 #include <string>
@@ -96,14 +97,23 @@
 {
     llvm::SmallString<128> pipe_name;
     Error error;
-    do {
+    ::UUID unique_id;
+    RPC_CSTR unique_string;
+    RPC_STATUS status = ::UuidCreate(&unique_id);
+    if (status == RPC_S_OK || status == RPC_S_UUID_LOCAL_ONLY)
+        status = ::UuidToStringA(&unique_id, &unique_string);
+    if (status == RPC_S_OK)
+    {
         pipe_name = prefix;
         pipe_name += "-";
-        for (unsigned i = 0; i < 6; i++) {
-            pipe_name += "0123456789abcdef"[llvm::sys::Process::GetRandomNumber() & 15];
-        }
-        Error error = CreateNew(pipe_name, child_process_inherit);
-    } while (error.GetError() == ERROR_ALREADY_EXISTS);
+        pipe_name += reinterpret_cast<char *>(unique_string);
+        ::RpcStringFreeA(&unique_string);
+        error = CreateNew(pipe_name, child_process_inherit);
+    }
+    else
+    {
+        error.SetError(status, eErrorTypeWin32);
+    }
     if (error.Success())
         name = pipe_name;
     return error;
Index: lldb/trunk/cmake/LLDBDependencies.cmake
===================================================================
--- lldb/trunk/cmake/LLDBDependencies.cmake
+++ lldb/trunk/cmake/LLDBDependencies.cmake
@@ -69,6 +69,7 @@
     lldbPluginProcessElfCore
     lldbPluginJITLoaderGDB
     Ws2_32
+    Rpcrt4
     )
 endif ()

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D7509.19770.patch
Type: text/x-patch
Size: 1664 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20150211/f23ccc00/attachment.bin>


More information about the lldb-commits mailing list