@@ -541,22 +541,6 @@ bool ThreadList::WillResume() {
541
541
}
542
542
}
543
543
544
- // Give all the threads that are likely to run a last chance to set up their
545
- // state before we negotiate who is actually going to get a chance to run...
546
- // Don't set to resume suspended threads, and if any thread wanted to stop
547
- // others, only call setup on the threads that request StopOthers...
548
-
549
- for (pos = m_threads.begin (); pos != end; ++pos) {
550
- ThreadSP thread_sp (*pos);
551
- if (thread_sp->GetResumeState () != eStateSuspended &&
552
- (!wants_solo_run || (*pos)->GetCurrentPlan ()->StopOthers ())) {
553
- if (thread_sp->IsOperatingSystemPluginThread () &&
554
- !thread_sp->GetBackingThread ())
555
- continue ;
556
- thread_sp->SetupForResume ();
557
- }
558
- }
559
-
560
544
// Now go through the threads and see if any thread wants to run just itself.
561
545
// if so then pick one and run it.
562
546
@@ -595,6 +579,36 @@ bool ThreadList::WillResume() {
595
579
}
596
580
}
597
581
582
+ // Give all the threads that are likely to run a last chance to set up their
583
+ // state before we negotiate who is actually going to get a chance to run...
584
+ // Don't set to resume suspended threads, and if any thread wanted to stop
585
+ // others, only call setup on the threads that request StopOthers...
586
+ for (pos = m_threads.begin (); pos != end; ++pos) {
587
+ ThreadSP thread_sp (*pos);
588
+ if (thread_sp->GetResumeState () != eStateSuspended &&
589
+ (!wants_solo_run || (*pos)->GetCurrentPlan ()->StopOthers ())) {
590
+ if (thread_sp->IsOperatingSystemPluginThread () &&
591
+ !thread_sp->GetBackingThread ())
592
+ continue ;
593
+ if (thread_sp->SetupForResume ()) {
594
+ // You can't say "stop others" and also want yourself to be suspended.
595
+ assert (thread_sp->GetCurrentPlan ()->RunState () != eStateSuspended);
596
+ run_me_only_list.AddThread (thread_sp);
597
+
598
+ if (!(stop_others_thread_sp && stop_others_thread_sp->ShouldRunBeforePublicStop ())) {
599
+ if (thread_sp == GetSelectedThread ())
600
+ stop_others_thread_sp = thread_sp;
601
+
602
+ if (thread_sp->ShouldRunBeforePublicStop ()) {
603
+ // This takes precedence, so if we find one of these, service it:
604
+ stop_others_thread_sp = thread_sp;
605
+ break ;
606
+ }
607
+ }
608
+ }
609
+ }
610
+ }
611
+
598
612
if (run_me_only_list.GetSize (false ) == 0 ) {
599
613
Log *log = GetLog (LLDBLog::Step);
600
614
if (log && log->GetVerbose ())
0 commit comments