Skip to content

Commit

Permalink
Make it possible to stop the operation thread in NativeProcessLinux
Browse files Browse the repository at this point in the history
Previously the operation thread is stopped with a cancel event but
pthread_cancel is not supported on android. This CL creates a custom
operation which asks the operation thread to exit without any pthread
call.

Differential revision: http://reviews.llvm.org/D7937

llvm-svn: 230945
  • Loading branch information
Tamas Berghammer committed Mar 2, 2015
1 parent f1115fe commit 6806fde
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp
Expand Up @@ -3370,6 +3370,15 @@ NativeProcessLinux::ServeOperation(OperationArgs *args)
assert(false && "Unexpected errno from sem_wait");
}

// nullptr as operation means the operation thread should exit. Cancel() can't be used
// because it is not supported on android.
if (!monitor->m_operation)
{
// notify calling thread that operation is complete
sem_post(&monitor->m_operation_done);
break;
}

reinterpret_cast<Operation*>(monitor->m_operation)->Execute(monitor);

// notify calling thread that operation is complete
Expand Down Expand Up @@ -3555,8 +3564,8 @@ NativeProcessLinux::StopMonitoringChildProcess()
void
NativeProcessLinux::StopMonitor()
{
StopMonitoringChildProcess();
StopOpThread();
StopMonitoringChildProcess();
StopCoordinatorThread ();
sem_destroy(&m_operation_pending);
sem_destroy(&m_operation_done);
Expand All @@ -3574,7 +3583,7 @@ NativeProcessLinux::StopOpThread()
if (!m_operation_thread.IsJoinable())
return;

m_operation_thread.Cancel();
DoOperation(nullptr); // nullptr as operation ask the operation thread to exit
m_operation_thread.Join(nullptr);
}

Expand Down

0 comments on commit 6806fde

Please sign in to comment.