From: Tankut Baris Aktemur Date: Tue, 21 Apr 2026 07:11:02 +0000 (+0200) Subject: gdb, multi-target: pass a target argument to delete_exited_threads X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9de228e0cb43af76a646ba13ea00de731de852fd;p=thirdparty%2Fbinutils-gdb.git gdb, multi-target: pass a target argument to delete_exited_threads Similar to the parent commit, delete_exited_threads is also mostly used in the context of a particular target. Pass that target as a parameter and skip other targets. There seems to be two cases where we actually would want to iterate all targets. One use is in inferior_appeared (inferior.c) and the other is in thread_select (thread.c). To handle these cases, allow the argument to be nullptr. Approved-By: Simon Marchi --- diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c index a1c7801ec1e..706d6efd342 100644 --- a/gdb/fbsd-nat.c +++ b/gdb/fbsd-nat.c @@ -1004,7 +1004,7 @@ fbsd_nat_target::update_thread_list () #ifdef PT_LWP_EVENTS /* With support for thread events, threads are added/deleted from the list as events are reported, so just try deleting exited threads. */ - delete_exited_threads (); + delete_exited_threads (this); #else prune_threads (this); diff --git a/gdb/gdbthread.h b/gdb/gdbthread.h index 1e3b42265aa..b3052b28d1a 100644 --- a/gdb/gdbthread.h +++ b/gdb/gdbthread.h @@ -983,9 +983,9 @@ extern void update_thread_list (void); extern void prune_threads (process_stratum_target *target); /* Delete threads marked THREAD_EXITED. Unlike prune_threads, this - does not consult the target about whether the thread is alive right - now. */ -extern void delete_exited_threads (void); + does not consult TARGET about whether the thread is alive right + now. If TARGET is nullptr, operate on all targets. */ +extern void delete_exited_threads (process_stratum_target *target); /* Return true if PC is in the stepping range of THREAD. */ diff --git a/gdb/inferior.c b/gdb/inferior.c index e050dec402e..1481f46cdd1 100644 --- a/gdb/inferior.c +++ b/gdb/inferior.c @@ -368,7 +368,7 @@ inferior_appeared (struct inferior *inf, int pid) { /* If this is the first inferior with threads, reset the global thread id. */ - delete_exited_threads (); + delete_exited_threads (nullptr); if (!any_thread_p ()) init_thread_list (); diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c index 6018d6c9914..d7d5e010748 100644 --- a/gdb/linux-nat.c +++ b/gdb/linux-nat.c @@ -3967,7 +3967,7 @@ linux_nat_target::update_thread_list () /* We add/delete threads from the list as clone/exit events are processed, so just try deleting exited threads still in the thread list. */ - delete_exited_threads (); + delete_exited_threads (this); /* Update the processor core that each lwp/thread was last seen running on. */ diff --git a/gdb/netbsd-nat.c b/gdb/netbsd-nat.c index 6b9029bf0ef..36bd91f968c 100644 --- a/gdb/netbsd-nat.c +++ b/gdb/netbsd-nat.c @@ -155,7 +155,7 @@ nbsd_nat_target::post_attach (int pid) void nbsd_nat_target::update_thread_list () { - delete_exited_threads (); + delete_exited_threads (this); } /* Convert PTID to a string. */ diff --git a/gdb/thread.c b/gdb/thread.c index 64c06dc87f6..74124596b28 100644 --- a/gdb/thread.c +++ b/gdb/thread.c @@ -779,9 +779,9 @@ prune_threads (process_stratum_target *target) /* See gdbthreads.h. */ void -delete_exited_threads (void) +delete_exited_threads (process_stratum_target *target) { - for (thread_info &tp : all_threads_safe ()) + for (thread_info &tp : all_threads_safe (target)) if (tp.state () == THREAD_EXITED) delete_thread (&tp); } @@ -2112,7 +2112,7 @@ thread_select (const char *tidstr, thread_info *tp) /* Since the current thread may have changed, see if there is any exited thread we can now delete. */ - delete_exited_threads (); + delete_exited_threads (nullptr); } /* Print thread and frame switch command response. */