fallkrum added a comment.

As far as I see the problem lies in Process::ProcessEventData::DoOnRemoval:

  StopInfoSP stop_info_sp = thread_sp->GetStopInfo();
        if (stop_info_sp && stop_info_sp->IsValid()) {
          does_anybody_have_an_opinion = true;
          bool this_thread_wants_to_stop;
          if (stop_info_sp->GetOverrideShouldStop()) {
            this_thread_wants_to_stop =
                stop_info_sp->GetOverriddenShouldStopValue();
          } else {
            stop_info_sp->PerformAction(event_ptr);
            // The stop action might restart the target.  If it does, then we
            // want to mark that in the event so that whoever is receiving it
            // will know to wait for the running event and reflect that state
            // appropriately. We also need to stop processing actions, since 
they
            // aren't expecting the target to be running.
  
            // FIXME: we might have run.
            if (stop_info_sp->HasTargetRunSinceMe()) {
              SetRestarted(true);
              break;
            }
  
            this_thread_wants_to_stop = stop_info_sp->ShouldStop(event_ptr);
          }
  
          if (!still_should_stop)
            still_should_stop = this_thread_wants_to_stop;
        }
      }

As you can see we get StopInfo from all the the threads available even 
suspended (note that all thread's stop_info are valid at this moment due to 
GetPrivateStopInfo gets called prior to DoOnRemoval). As a result we have a 
situation when suspended thread's stop_info tells we should stop even when the 
thread that is a real reason of stop says we should not.  Maybe you are right 
and the right place for the fix is inside 
Process::ProcessEventData::DoOnRemoval, something like this:

  if (stop_info_sp && stop_info_sp->IsValid() && thread_sp->ShouldStop()) {
  .....
  }
  }

But you know, I don't know if it possible to apply it, semantics of 
Thread::ShouldStop is Thread::ShouldStop(Event *) and it is unclear what kind 
of event to pass in. In any case, maybe I don't see the whole picture of what's 
going on yet but I don't see any reason to hold on stop_info of suspended 
thread.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D80112/new/

https://reviews.llvm.org/D80112



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to