================
@@ -589,14 +621,69 @@ bool ThreadList::WillResume(RunDirection &direction) {
           assert(thread_sp->GetCurrentPlan()->GetDirection() == direction);
           // You can't say "stop others" and also want yourself to be 
suspended.
           assert(thread_sp->GetCurrentPlan()->RunState() != eStateSuspended);
+
----------------
jimingham wrote:

Well that was dumb...

By bad fortune the GitHub diff display elided JUST line 617, and I didn't 
notice the elision...  Grrr...

With that line actually present, this makes more sense.

I don't think it affects your analysis, but this isn't necessarily correct:

`StopOthers scans: we scan for threads whose current plan has 
stopothers()=true. since we just popped all stepoverbreakpoint plans, these 
wont contibue here. the only way thread_to_run gets set in this scan is if some 
thread has non-breapoint stopothers plan. in our case, we shouldnt have a 
thread that has such plan, so thread_to_ryb remains nullptr and we fall to the 
else branch.
`

You might have one thread that's trying to stop the other threads, for instance 
because it's running a function on one thread only, or doing a "run this thread 
only step" and might have inserted a breakpoint to do that.  It might have even 
hit its breakpoint on one stop, but then didn't get a chance to run so that at 
the next stop, after the ThreadPlanStepOverBreakpoint is popped, there will 
still be a plan that wants to run solo on that thread.

But I don't think that wouldn't be a problem, because even if there were one or 
more "run on their own" threads after the ThreadPlanStepOverBreakpoints are 
removed, we'd pick one of them and it will go through the "if (thread_to_run)" 
branch and set only its ThreadPlanStepOverBreakpoint and then it will run solo. 
 If that thread were sitting at a breakpoint that other threads shared, you 
would in this case lose the "run past all the breakpoints with only one 
breakpoint insertion/removal" but that is appropriate because the remaining 
plans after removing the step over breakpoint plans are the ones that are doing 
actual work as directed by the user.  So they should be of higher priority.

This all looks right to me once I see it all...

But I want @jasonmolenda to take a look because he did all the work to make the 
breakpoint hit accounting work correctly.  I can't see how this would mess that 
up, but Jason will be much more likely to see any subtle problems I might miss.

https://github.com/llvm/llvm-project/pull/180101
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to