summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp
diff options
context:
space:
mode:
authorTodd Fiala <tfiala@google.com>2014-01-24 22:59:22 +0000
committerTodd Fiala <tfiala@google.com>2014-01-24 22:59:22 +0000
commit8ce3dee45f35df56a31cf30bb8e4b865215338e2 (patch)
tree70ea8da04759f7f5ddcde494a4f871effbf6e6f1 /lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp
parenta8e1e9b143313a04a22124ef1c6edfe930a1ff3c (diff)
downloadbcm5719-llvm-8ce3dee45f35df56a31cf30bb8e4b865215338e2.tar.gz
bcm5719-llvm-8ce3dee45f35df56a31cf30bb8e4b865215338e2.zip
Fix crash on Linux if sem_wait() is interrupted.
Patch by Andrew MacPherson. llvm-svn: 200049
Diffstat (limited to 'lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp')
-rw-r--r--lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp b/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp
index 0f79034bb7c..98dd9df5914 100644
--- a/lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp
+++ b/lldb/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,12 @@ ProcessMonitor::DoOperation(Operation *op)
sem_post(&m_operation_pending);
// wait for operation to complete
- sem_wait(&m_operation_done);
+ while (sem_wait(&m_operation_done))
+ {
+ if (errno == EINTR)
+ continue;
+ assert(false && "Unexpected errno from sem_wait");
+ }
}
size_t
OpenPOWER on IntegriCloud