diff options
Diffstat (limited to 'lldb/source/Target/Process.cpp')
| -rw-r--r-- | lldb/source/Target/Process.cpp | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp index 98f9ea13129..94e4f961064 100644 --- a/lldb/source/Target/Process.cpp +++ b/lldb/source/Target/Process.cpp @@ -62,6 +62,7 @@ #include "lldb/Target/ThreadPlanBase.h" #include "lldb/Target/UnixSignals.h" #include "lldb/Utility/NameMatches.h" +#include "lldb/Utility/SelectHelper.h" using namespace lldb; using namespace lldb_private; @@ -4925,25 +4926,20 @@ public: m_is_running = true; while (!GetIsDone()) { - fd_set read_fdset; - FD_ZERO (&read_fdset); - FD_SET (read_fd, &read_fdset); - FD_SET (pipe_read_fd, &read_fdset); - const int nfds = std::max<int>(read_fd, pipe_read_fd) + 1; - int num_set_fds = select(nfds, &read_fdset, nullptr, nullptr, nullptr); - - if (num_set_fds < 0) - { - const int select_errno = errno; + SelectHelper select_helper; + select_helper.FDSetRead(read_fd); + select_helper.FDSetRead(pipe_read_fd); + Error error = select_helper.Select(); - if (select_errno != EINTR) - SetIsDone(true); + if (error.Fail()) + { + SetIsDone(true); } - else if (num_set_fds > 0) + else { char ch = 0; size_t n; - if (FD_ISSET (read_fd, &read_fdset)) + if (select_helper.FDIsSetRead(read_fd)) { n = 1; if (m_read_file.Read(&ch, n).Success() && n == 1) @@ -4954,7 +4950,7 @@ public: else SetIsDone(true); } - if (FD_ISSET (pipe_read_fd, &read_fdset)) + if (select_helper.FDIsSetRead(pipe_read_fd)) { size_t bytes_read; // Consume the interrupt byte |

