diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2016-10-18 13:20:40 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2016-10-18 14:55:01 (GMT) |
commit | 9112c43ebc96c8ea25042520f769cb1575439c22 (patch) | |
tree | 8045fea939ca7a5fab9fcd91d83375e4a7554d40 | |
parent | 5ffeb9bc13f817077479a74e2de8f8c282c67829 (diff) | |
download | CMake-9112c43ebc96c8ea25042520f769cb1575439c22.zip CMake-9112c43ebc96c8ea25042520f769cb1575439c22.tar.gz CMake-9112c43ebc96c8ea25042520f769cb1575439c22.tar.bz2 |
server-mode: Fix named pipe mode
Do not treat a pointer itself as a `uv_stream_t`, but instead the
pointed-to `uv_pipe_t`. It is unclear how this ever worked before in
local testing.
While at it, remove duplicate setup code and improve an error message.
-rw-r--r-- | Source/cmServerConnection.cxx | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/Source/cmServerConnection.cxx b/Source/cmServerConnection.cxx index a814d16..b4af52b 100644 --- a/Source/cmServerConnection.cxx +++ b/Source/cmServerConnection.cxx @@ -323,11 +323,10 @@ bool cmServerPipeConnection::DoSetup(std::string* errorMessage) ": " + uv_err_name(r); return false; } - auto serverStream = reinterpret_cast<uv_stream_t*>(&this->ServerPipe); - serverStream->data = this; + auto serverStream = reinterpret_cast<uv_stream_t*>(this->ServerPipe); if ((r = uv_listen(serverStream, 1, on_new_connection)) != 0) { - *errorMessage = std::string("Internal Error with ") + this->PipeName + - ": " + uv_err_name(r); + *errorMessage = std::string("Internal Error listening on ") + + this->PipeName + ": " + uv_err_name(r); return false; } @@ -340,7 +339,7 @@ void cmServerPipeConnection::TearDown() uv_close(reinterpret_cast<uv_handle_t*>(this->ClientPipe), &on_pipe_close); this->WriteStream->data = nullptr; } - uv_close(reinterpret_cast<uv_handle_t*>(&this->ServerPipe), &on_pipe_close); + uv_close(reinterpret_cast<uv_handle_t*>(this->ServerPipe), &on_pipe_close); this->ClientPipe = nullptr; this->ServerPipe = nullptr; @@ -364,7 +363,7 @@ void cmServerPipeConnection::Connect(uv_stream_t* server) this->ClientPipe = new uv_pipe_t; uv_pipe_init(this->Loop(), this->ClientPipe, 0); this->ClientPipe->data = this; - auto client = reinterpret_cast<uv_stream_t*>(&this->ClientPipe); + auto client = reinterpret_cast<uv_stream_t*>(this->ClientPipe); if (uv_accept(server, client) != 0) { uv_close(reinterpret_cast<uv_handle_t*>(client), nullptr); return; |