summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp')
-rw-r--r--lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp11
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)
OpenPOWER on IntegriCloud