diff options
Diffstat (limited to 'lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp')
-rw-r--r-- | lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp b/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp index 8fe74511108..2c936386baa 100644 --- a/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp +++ b/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp @@ -607,7 +607,7 @@ ProcessMonitor::OperationThread(void *arg) if (!Launch(args)) return NULL; - ServeOperation(args->m_monitor); + ServeOperation(args); return NULL; } @@ -716,8 +716,6 @@ ProcessMonitor::Launch(LaunchArgs *args) process.SendMessage(ProcessMessage::Trace(pid)); FINISH: - // Sync with our parent thread now that the launch operation is complete. - sem_post(&args->m_semaphore); return args->m_error.Success(); } @@ -819,15 +817,20 @@ ProcessMonitor::MonitorSIGTRAP(ProcessMonitor *monitor, lldb::pid_t pid) } void -ProcessMonitor::ServeOperation(ProcessMonitor *monitor) +ProcessMonitor::ServeOperation(LaunchArgs *args) { int status; pollfd fdset; + ProcessMonitor *monitor = args->m_monitor; fdset.fd = monitor->m_server_fd; fdset.events = POLLIN | POLLPRI; fdset.revents = 0; + // We are finised with the arguments and are ready to go. Sync with the + // parent thread and start serving operations on the inferior. + sem_post(&args->m_semaphore); + for (;;) { if ((status = poll(&fdset, 1, -1)) < 0) |