Author: gclayton Date: Wed May 25 19:08:39 2016 New Revision: 270803 URL: http://llvm.org/viewvc/llvm-project?rev=270803&view=rev Log: 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> Modified: lldb/trunk/source/API/SBProcess.cpp Modified: lldb/trunk/source/API/SBProcess.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBProcess.cpp?rev=270803&r1=270802&r2=270803&view=diff ============================================================================== --- lldb/trunk/source/API/SBProcess.cpp (original) +++ lldb/trunk/source/API/SBProcess.cpp Wed May 25 19:08:39 2016 @@ -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) _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits