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

Reply via email to