When calculating the "currently selected thread" in Process::HandleStateChangedEvent, we check whether a thread stopped for eStopReasonSignal is stopped for a signal that's currently set to "no-stop". If it is, then we don't set that thread as the currently selected thread.
But that only happens in the part of the algorithm that's handling the case where the previously selected thread has no stop reason. Since we want to keep on a thread as long as it is doing something interesting, we always prefer the current thread. That's almost right, but we forgot to check whether the previously selected thread stopped with an eStopReasonSignal for a "no-stop" signal. If it did, then we shouldn't select it.
This patch adds that check. I can't figure out a good way to test this. This is the sort of thing that Ismail's scripted process plugin will make easy once it is a real boy. But figuring out how to do this in a real process is not trivial.
If we are setting prefer_curr_thread here, which I think is good, then I don't think we need to the prefer_curr_thread = false; lines in the switch. This will simplfiy the if/else below since we only care about the true case then.