<rdar://problem/13194155>
Fixing an issue where threads and frames could get out of sync and cause ValueObjects to fail to retrieve their values correctly llvm-svn: 177166
This commit is contained in:
parent
c8541f2bf2
commit
ebafd2f187
|
@ -815,22 +815,20 @@ lldb::StackFrameSP
|
|||
ExecutionContextRef::GetFrameSP () const
|
||||
{
|
||||
lldb::StackFrameSP frame_sp (m_frame_wp.lock());
|
||||
if (!frame_sp && m_stack_id.IsValid())
|
||||
if (frame_sp)
|
||||
{
|
||||
lldb::ThreadSP thread_sp (GetThreadSP());
|
||||
if (thread_sp)
|
||||
{
|
||||
frame_sp = thread_sp->GetFrameWithStackID (m_stack_id);
|
||||
m_frame_wp = frame_sp;
|
||||
}
|
||||
else
|
||||
{
|
||||
// If the thread that this frame was supposed to belong to is not valid, then
|
||||
// return a NULL frame_sp.
|
||||
frame_sp.reset();
|
||||
}
|
||||
lldb::ThreadSP frame_thread_sp(frame_sp->GetThread());
|
||||
if (frame_thread_sp && frame_thread_sp->IsValid())
|
||||
return frame_sp;
|
||||
}
|
||||
return frame_sp;
|
||||
lldb::ThreadSP thread_sp (GetThreadSP());
|
||||
if (thread_sp && thread_sp->IsValid())
|
||||
{
|
||||
frame_sp = thread_sp->GetFrameWithStackID (m_stack_id);
|
||||
m_frame_wp = frame_sp;
|
||||
return frame_sp;
|
||||
}
|
||||
return lldb::StackFrameSP();
|
||||
}
|
||||
|
||||
ExecutionContext
|
||||
|
|
|
@ -250,6 +250,10 @@ StackFrameList::SetCurrentInlinedDepth (uint32_t new_depth)
|
|||
void
|
||||
StackFrameList::GetFramesUpTo(uint32_t end_idx)
|
||||
{
|
||||
// this makes sure we do not fetch frames for an invalid thread
|
||||
if (m_thread.IsValid() == false)
|
||||
return;
|
||||
|
||||
// We've already gotten more frames than asked for, or we've already finished unwinding, return.
|
||||
if (m_frames.size() > end_idx || GetAllFramesFetched())
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue