mirror of
https://github.com/intel/llvm.git
synced 2026-01-15 04:17:17 +08:00
Lock mutex in the same order.
SBProcess uses 2 mutexex; RunLock and APILock. Apart from 2 places, RunLock is locked before API lock. I have fixed the 2 places where order was different. I observed a deadlock due to this different order in lldb-mi once. Although lldb-mi command and event thread dont run at the same time now. So it can not deadlock there but can still be problem for some other clients. Pre-approved by Greg in http://lists.cs.uiuc.edu/pipermail/lldb-dev/2015-February/006509.html llvm-svn: 228844
This commit is contained in:
@@ -918,9 +918,9 @@ SBProcess::GetThreadByID (tid_t tid)
|
||||
ProcessSP process_sp(GetSP());
|
||||
if (process_sp)
|
||||
{
|
||||
Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex());
|
||||
Process::StopLocker stop_locker;
|
||||
const bool can_update = stop_locker.TryLock(&process_sp->GetRunLock());
|
||||
Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex());
|
||||
thread_sp = process_sp->GetThreadList().FindThreadByID (tid, can_update);
|
||||
sb_thread.SetThread (thread_sp);
|
||||
}
|
||||
@@ -942,9 +942,9 @@ SBProcess::GetThreadByIndexID (uint32_t index_id)
|
||||
ProcessSP process_sp(GetSP());
|
||||
if (process_sp)
|
||||
{
|
||||
Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex());
|
||||
Process::StopLocker stop_locker;
|
||||
const bool can_update = stop_locker.TryLock(&process_sp->GetRunLock());
|
||||
Mutex::Locker api_locker (process_sp->GetTarget().GetAPIMutex());
|
||||
thread_sp = process_sp->GetThreadList().FindThreadByIndexID (index_id, can_update);
|
||||
sb_thread.SetThread (thread_sp);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user