diff options
Diffstat (limited to 'lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp')
-rw-r--r-- | lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp | 67 |
1 files changed, 12 insertions, 55 deletions
diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp index e0b9ce01f80..032d74cbbe0 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunication.cpp @@ -13,7 +13,6 @@ // C Includes #include <limits.h> #include <string.h> -#include <sys/select.h> #include <sys/stat.h> // C++ Includes @@ -43,50 +42,6 @@ using namespace lldb; using namespace lldb_private; -namespace -{ - -Error -ReadPortFromPipe (const char *const named_pipe_path, uint16_t& port, const int timeout_secs) -{ - File name_pipe_file; - auto error = name_pipe_file.Open (named_pipe_path, File::eOpenOptionRead | File::eOpenOptionNonBlocking); - if (error.Fail ()) - return error; - - struct timeval tv = {timeout_secs, 0}; - const auto pipe_handle = name_pipe_file.GetWaitableHandle (); - fd_set rfds; - FD_ZERO(&rfds); - FD_SET(pipe_handle, &rfds); - - const auto retval = ::select (pipe_handle + 1, &rfds, NULL, NULL, &tv); - if (retval == -1) - { - error.SetErrorToErrno (); - return error; - } - if (retval == 0) - { - error.SetErrorString ("timeout exceeded"); - return error; - } - - char port_cstr[256]; - port_cstr[0] = '\0'; - size_t num_bytes = sizeof(port_cstr); - error = name_pipe_file.Read (port_cstr, num_bytes); - - if (error.Success ()) - { - assert (num_bytes > 0 && port_cstr[num_bytes-1] == '\0'); - port = Args::StringToUInt32 (port_cstr, 0); - } - return error; -} - -} - GDBRemoteCommunication::History::History (uint32_t size) : m_packets(), m_curr_idx (0), @@ -917,23 +872,25 @@ GDBRemoteCommunication::StartDebugserverProcess (const char *hostname, launch_info.AppendSuppressFileAction (STDIN_FILENO, true, false); launch_info.AppendSuppressFileAction (STDOUT_FILENO, false, true); launch_info.AppendSuppressFileAction (STDERR_FILENO, false, true); - + error = Host::LaunchProcess(launch_info); - + if (error.Success() && launch_info.GetProcessID() != LLDB_INVALID_PROCESS_ID) { if (named_pipe_path[0]) { - error = ReadPortFromPipe(named_pipe_path, out_port, 10); + File name_pipe_file; + error = name_pipe_file.Open(named_pipe_path, File::eOpenOptionRead); if (error.Success()) { - if (log) - log->Printf("GDBRemoteCommunication::%s() debugserver listens %u port", __FUNCTION__, out_port); - } - else - { - if (log) - log->Printf("GDBRemoteCommunication::%s() failed to read a port value from named pipe %s: %s", __FUNCTION__, named_pipe_path, error.AsCString()); + char port_cstr[256]; + port_cstr[0] = '\0'; + size_t num_bytes = sizeof(port_cstr); + error = name_pipe_file.Read(port_cstr, num_bytes); + assert (error.Success()); + assert (num_bytes > 0 && port_cstr[num_bytes-1] == '\0'); + out_port = Args::StringToUInt32(port_cstr, 0); + name_pipe_file.Close(); } FileSystem::Unlink(named_pipe_path); } |