fbsd-nat: Defer any ineligible events reported by wait.
authorJohn Baldwin <jhb@FreeBSD.org>
Mon, 14 Aug 2023 20:38:42 +0000 (13:38 -0700)
committerJohn Baldwin <jhb@FreeBSD.org>
Mon, 14 Aug 2023 20:38:42 +0000 (13:38 -0700)
commita6f51542941e072d942fc8df7353bd10097974ea
tree7b9db7827471e8102be2a72e372942600ac9dedc
parent1b0fa45741276182cbb42d8a78b5eba0150d47a1
fbsd-nat: Defer any ineligible events reported by wait.

If wait_1 finds an event for a thread or process that does not match
the set of threads and processes previously resumed, defer the event.
If the event is for a specific thread, suspend the thread and continue
the associated process before waiting for another event.

One specific example of such an event is if a thread is created while
another thread in the same process hits a breakpoint.  If the second
thread's event is reported first, the target resume method does not
yet "know" about the new thread and will not suspend it via
PT_SUSPEND.  When wait is called, it will probably return the event
from the first thread before the result of the step from second
thread.  This is the case reported in PR 21497.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=21497
gdb/fbsd-nat.c