From 8ce3dee45f35df56a31cf30bb8e4b865215338e2 Mon Sep 17 00:00:00 2001 From: Todd Fiala Date: Fri, 24 Jan 2014 22:59:22 +0000 Subject: Fix crash on Linux if sem_wait() is interrupted. Patch by Andrew MacPherson. llvm-svn: 200049 --- lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'lldb/source/Plugins/Process/Linux/ProcessMonitor.cpp') 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 -- cgit v1.2.3