[Lldb-commits] [PATCH] Use GUIDs to make pipe names unique on Windows.
Adrian McCarthy
amccarth at google.com
Mon Feb 9 14:08:53 PST 2015
Addressed review comments.
http://reviews.llvm.org/D7509
Files:
cmake/LLDBDependencies.cmake
source/Host/windows/PipeWindows.cpp
Index: cmake/LLDBDependencies.cmake
===================================================================
--- cmake/LLDBDependencies.cmake
+++ cmake/LLDBDependencies.cmake
@@ -69,6 +69,7 @@
lldbPluginProcessElfCore
lldbPluginJITLoaderGDB
Ws2_32
+ Rpcrt4
)
endif ()
Index: source/Host/windows/PipeWindows.cpp
===================================================================
--- source/Host/windows/PipeWindows.cpp
+++ 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 += *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;
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D7509.19614.patch
Type: text/x-patch
Size: 1573 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20150209/5772f5f4/attachment.bin>
More information about the lldb-commits
mailing list