From 57c28d45f9ad14130c8375b3b5ec6996b63574fd Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Mon, 14 Aug 2023 13:38:42 -0700 Subject: [PATCH] fbsd-nat: Fix thread_alive against a running thread. FreeBSD's ptrace fails requests with EBUSY against a running process. Report that the thread is alive instead of dead if ptrace fails with EBUSY. This fixes an internal error in the gdb.threads/detach-step-over.exp test where one process was detached while a thread in a second process was being stepped. The core incorrectly assumed the stepping thread had vanished and discarded the pending stepping state. When the thread later reported a SIGTRAP from completing the step, this triggered an assertion. --- gdb/fbsd-nat.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c index d09f4b12bee..5f66a3053d5 100644 --- a/gdb/fbsd-nat.c +++ b/gdb/fbsd-nat.c @@ -843,7 +843,13 @@ fbsd_nat_target::thread_alive (ptid_t ptid) if (ptrace (PT_LWPINFO, ptid.lwp (), (caddr_t) &pl, sizeof pl) == -1) - return false; + { + /* EBUSY means the associated process is running which means + the LWP does exist and belongs to a running process. */ + if (errno == EBUSY) + return true; + return false; + } #ifdef PL_FLAG_EXITED if (pl.pl_flags & PL_FLAG_EXITED) return false; -- 2.30.2