Rework how the API mutex is acquired when filling out an ExecutionContext from an ExecutionContextRef,
particularly in the SBThread & SBFrame interfaces. Instead of filling the whole context & then getting the API mutex, we now get only the target, acquire the API mutex from it, then fill out the rest of the context. This removes a race condition where you get a ThreadSP, then wait on the API mutex while another command Destroy's the Thread you've just gotten. Also fixed the ExecutionContextRef::Get*SP calls so they don't return invalid objects. Also fixed the ExecutionContext::Has*Scope calls so they don't claim to have a scope if the object representing that scope has been destroyed. Also fixed a think-o in Thread::IsValid which was causing it to return the opposite of the desired value. <rdar://problem/11995490> llvm-svn: 162401
This commit is contained in:
@@ -102,7 +102,8 @@ SBProcess::Clear ()
|
||||
bool
|
||||
SBProcess::IsValid() const
|
||||
{
|
||||
return m_opaque_wp.lock().get() != NULL;
|
||||
ProcessSP process_sp(m_opaque_wp.lock());
|
||||
return ((bool) process_sp && process_sp->IsValid());
|
||||
}
|
||||
|
||||
bool
|
||||
|
||||
Reference in New Issue
Block a user