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:
Jim Ingham
2012-08-22 21:34:33 +00:00
parent 1e4f425d2f
commit 4fc6cb9c76
9 changed files with 242 additions and 110 deletions

View File

@@ -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