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 <simon.marchi@efficios.com>
This commit is contained in:
Tankut Baris Aktemur 2026-04-21 09:11:02 +02:00
parent 076b132589
commit 9de228e0cb
6 changed files with 10 additions and 10 deletions

View file

@ -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);

View file

@ -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. */

View file

@ -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 ();

View file

@ -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. */

View file

@ -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. */

View file

@ -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. */