From 9b620f341a4810a1538706c73887f3cd913022ea Mon Sep 17 00:00:00 2001 From: Jim Ingham Date: Fri, 22 Feb 2013 21:23:43 +0000 Subject: [PATCH] The thread plans run before the event is broadcast, so they should be calling ShouldStopSynchronous on any Stop Info's they want to check. The full ShouldStop should only be called on the public side of the event system. llvm-svn: 175922 --- lldb/source/Target/StopInfo.cpp | 13 ++++++++++++- lldb/source/Target/ThreadPlanBase.cpp | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lldb/source/Target/StopInfo.cpp b/lldb/source/Target/StopInfo.cpp index 3500a88..322d05e 100644 --- a/lldb/source/Target/StopInfo.cpp +++ b/lldb/source/Target/StopInfo.cpp @@ -569,7 +569,7 @@ public: protected: virtual bool - ShouldStop (Event *event_ptr) + ShouldStopSynchronous (Event *event_ptr) { // ShouldStop() method is idempotent and should not affect hit count. // See Process::RunPrivateStateThread()->Process()->HandlePrivateEvent() @@ -604,6 +604,15 @@ protected: return m_should_stop; } + bool + ShouldStop (Event *event_ptr) + { + // This just reports the work done by PerformAction or the synchronous stop. It should + // only ever get called after they have had a chance to run. + assert (m_should_stop_is_valid); + return m_should_stop; + } + virtual void PerformAction (Event *event_ptr) { @@ -759,6 +768,8 @@ protected: if (log) log->Printf ("Process::%s returning from action with m_should_stop: %d.", __FUNCTION__, m_should_stop); + m_should_stop_is_valid = true; + } private: diff --git a/lldb/source/Target/ThreadPlanBase.cpp b/lldb/source/Target/ThreadPlanBase.cpp index fda430c..cf1f68f 100644 --- a/lldb/source/Target/ThreadPlanBase.cpp +++ b/lldb/source/Target/ThreadPlanBase.cpp @@ -101,7 +101,7 @@ ThreadPlanBase::ShouldStop (Event *event_ptr) case eStopReasonBreakpoint: case eStopReasonWatchpoint: - if (stop_info_sp->ShouldStop(event_ptr)) + if (stop_info_sp->ShouldStopSynchronous(event_ptr)) { // If we are going to stop for a breakpoint, then unship the other plans // at this point. Don't force the discard, however, so Master plans can stay -- 2.7.4