Fix a crash where if sem_wait is interrupted then
ProcessMonitor::ServeOperation() will crash accessing an invalid
monitor->m_operation pointer. The fix is taken from how this same case is
already handled in the ProcessMonitor constructor.
Thanks,
Andrew
diff --git a/source/Plugins/Process/Linux/ProcessMonitor.cpp b/source/Plugins/Process/Linux/ProcessMonitor.cpp
index 0f79034..6c9f768 100644
--- a/source/Plugins/Process/Linux/ProcessMonitor.cpp
+++ b/source/Plugins/Process/Linux/ProcessMonitor.cpp
@@ -2062,7 +2062,12 @@ ProcessMonitor::ServeOperation(OperationArgs *args)
for(;;)
{
// wait for next pending operation
- sem_wait(&monitor->m_operation_pending);
+ if (sem_wait(&monitor->m_operation_pending))
+ {
+ if (errno == EINTR)
+ continue;
+ assert(false && "Unexpected errno from sem_wait");
+ }
monitor->m_operation->Execute(monitor);
@@ -2082,7 +2087,13 @@ ProcessMonitor::DoOperation(Operation *op)
sem_post(&m_operation_pending);
// wait for operation to complete
- sem_wait(&m_operation_done);
+WAIT_AGAIN:
+ if (sem_wait(&m_operation_done))
+ {
+ if (errno == EINTR)
+ goto WAIT_AGAIN;
+ assert(false && "Unexpected errno from sem_wait");
+ }
}
size_t
_______________________________________________
lldb-dev mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev