summaryrefslogtreecommitdiffstats
path: root/lldb/source/Target/Thread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Target/Thread.cpp')
-rw-r--r--lldb/source/Target/Thread.cpp26
1 files changed, 21 insertions, 5 deletions
diff --git a/lldb/source/Target/Thread.cpp b/lldb/source/Target/Thread.cpp
index 1c8265add06..ce9216a7466 100644
--- a/lldb/source/Target/Thread.cpp
+++ b/lldb/source/Target/Thread.cpp
@@ -293,17 +293,28 @@ Vote
Thread::ShouldReportStop (Event* event_ptr)
{
StateType thread_state = GetResumeState ();
- if (thread_state == eStateSuspended
- || thread_state == eStateInvalid)
+ Log *log = lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_STEP);
+
+ if (thread_state == eStateSuspended || thread_state == eStateInvalid)
+ {
+ if (log)
+ log->Printf ("Thread::ShouldReportStop() tid = 0x%4.4x: returning vote %i (state was suspended or invalid)\n", GetID(), eVoteNoOpinion);
return eVoteNoOpinion;
+ }
if (m_completed_plan_stack.size() > 0)
{
// Don't use GetCompletedPlan here, since that suppresses private plans.
+ if (log)
+ log->Printf ("Thread::ShouldReportStop() tid = 0x%4.4x: returning vote for complete stack's back plan\n", GetID());
return m_completed_plan_stack.back()->ShouldReportStop (event_ptr);
}
else
+ {
+ if (log)
+ log->Printf ("Thread::ShouldReportStop() tid = 0x%4.4x: returning vote for current plan\n", GetID());
return GetCurrentPlan()->ShouldReportStop (event_ptr);
+ }
}
Vote
@@ -797,7 +808,7 @@ StackFrameList &
Thread::GetStackFrameList ()
{
if (m_curr_frames_ap.get() == NULL)
- m_curr_frames_ap.reset (new StackFrameList (*this, m_prev_frames_ap.release(), true));
+ m_curr_frames_ap.reset (new StackFrameList (*this, m_prev_frames_sp, true));
return *m_curr_frames_ap;
}
@@ -813,8 +824,13 @@ Thread::GetStackFrameCount()
void
Thread::ClearStackFrames ()
{
- if (m_curr_frames_ap.get())
- m_prev_frames_ap = m_curr_frames_ap;
+ if (m_curr_frames_ap.get() && m_curr_frames_ap->GetNumFrames (false) > 1)
+ m_prev_frames_sp.reset (m_curr_frames_ap.release());
+ else
+ m_curr_frames_ap.release();
+
+// StackFrameList::Merge (m_curr_frames_ap, m_prev_frames_sp);
+// assert (m_curr_frames_ap.get() == NULL);
}
lldb::StackFrameSP
OpenPOWER on IntegriCloud