Make sure to try and take the process stop lock when calling:

uint32_t SBProcess::GetNumQueues();
SBQueue SBProcess::GetQueueAtIndex (size_t index);

Otherwise this code will run when the process is running and cause problems.

<rdar://problem/26482744>

llvm-svn: 270803
This commit is contained in:
Greg Clayton
2016-05-26 00:08:39 +00:00
parent 8fe8892c2d
commit a61d0a5b01

View File

@@ -549,9 +549,11 @@ SBProcess::GetNumQueues ()
if (process_sp)
{
Process::StopLocker stop_locker;
std::lock_guard<std::recursive_mutex> guard(process_sp->GetTarget().GetAPIMutex());
num_queues = process_sp->GetQueueList().GetSize();
if (stop_locker.TryLock(&process_sp->GetRunLock()))
{
std::lock_guard<std::recursive_mutex> guard(process_sp->GetTarget().GetAPIMutex());
num_queues = process_sp->GetQueueList().GetSize();
}
}
if (log)
@@ -572,9 +574,12 @@ SBProcess::GetQueueAtIndex (size_t index)
if (process_sp)
{
Process::StopLocker stop_locker;
std::lock_guard<std::recursive_mutex> guard(process_sp->GetTarget().GetAPIMutex());
queue_sp = process_sp->GetQueueList().GetQueueAtIndex(index);
sb_queue.SetQueue (queue_sp);
if (stop_locker.TryLock(&process_sp->GetRunLock()))
{
std::lock_guard<std::recursive_mutex> guard(process_sp->GetTarget().GetAPIMutex());
queue_sp = process_sp->GetQueueList().GetQueueAtIndex(index);
sb_queue.SetQueue (queue_sp);
}
}
if (log)