From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id N0S/JElU4mlpHB8AWB0awg (envelope-from ) for ; Fri, 17 Apr 2026 11:39:53 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=simark.ca; s=mail; t=1776440393; bh=9c9K7a4gstlJd4OUkSsWedtxuX0nuH46o9ss130QW3Q=; h=Date:Subject:To:References:From:In-Reply-To:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From; b=Lec5SMufGNRaj44+RhTn0yY7pl73mIFlBT18e2/WwUS0BatTAu0v5BE7xLLdfBYUL 9urW8gnRc2/UDk7a176SdZRLimf5TN1SUaTrwwLTPbTpv6gxV3UrLPVbrg20hAqLBI xG8kdeXOv1Gh+SubTVYpxnbf06UouDEXBP6rRl6I= Received: by simark.ca (Postfix, from userid 112) id 875451E0B1; Fri, 17 Apr 2026 11:39:53 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=simark.ca header.i=@simark.ca header.a=rsa-sha256 header.s=mail header.b=Nets18aM; dkim-atps=neutral Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id EF3051E04F for ; Fri, 17 Apr 2026 11:39:52 -0400 (EDT) Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 8CD434AA3971 for ; Fri, 17 Apr 2026 15:39:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8CD434AA3971 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=simark.ca header.i=@simark.ca header.a=rsa-sha256 header.s=mail header.b=Nets18aM Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id C8DB94C515D9 for ; Fri, 17 Apr 2026 15:39:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C8DB94C515D9 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=simark.ca Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=simark.ca ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C8DB94C515D9 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=158.69.221.121 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776440367; cv=none; b=gdVjcgnG281DnATZjMCczKeC+1IA+dhAqpalNv/Et3idtQyUt4hBGMEdXIMIlF8qqMKDEkK4GD2OR2dpFvNuwCDIER12zqYjEWrJHjT6jwJqGUdluG4F1kYk4r2uUplGQtZM+DRPlMEUqWknOqhAk2PepkY+q/PiXwynZNmSgfQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776440367; c=relaxed/simple; bh=9c9K7a4gstlJd4OUkSsWedtxuX0nuH46o9ss130QW3Q=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=DTaXLB6bVTUtEYC/KdiNU/8Mg3jSWBGnWSeG4wxSYnYiJ/HOaBViexzpk+2jkjeQgQgTr98k2PpWNlCSrvExX6FUR11LsPd+fPaQ4JOiYvumT3o4FgNpl1bSGpVHx+2cAYDnVJrDXhv21yNls2AyBpyanDiVxha5xmCkB9xsMEY= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C8DB94C515D9 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=simark.ca; s=mail; t=1776440366; bh=9c9K7a4gstlJd4OUkSsWedtxuX0nuH46o9ss130QW3Q=; h=Date:Subject:To:References:From:In-Reply-To:From; b=Nets18aMAkAk2L4mK3iZbtaKsVkKINADOoamg/SCPctubWdZV7b9XgTT+HzGQLYXR tNMRqdNeQQN32/RNjdkM4bgHqV2Z3o2OppMD0dhJJxz8z6S+zSefzmoOW3ShY4JP92 zkRb4iI5287WFHEf0L6sG/TgxtTWMfIXl5AHx8Eo= Received: by simark.ca (Postfix) id 6491C1E04F; Fri, 17 Apr 2026 11:39:26 -0400 (EDT) Message-ID: Date: Fri, 17 Apr 2026 11:39:25 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 2/2] gdb, multi-target: pass a target argument to delete_exited_threads To: Tankut Baris Aktemur , gdb-patches@sourceware.org References: <20260417111455.4126998-1-tankut.baris.aktemur@intel.com> Content-Language: fr From: Simon Marchi In-Reply-To: <20260417111455.4126998-1-tankut.baris.aktemur@intel.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org On 4/17/26 7:14 AM, Tankut Baris Aktemur wrote: > 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. > --- > gdb/fbsd-nat.c | 2 +- > gdb/gdbthread.h | 6 +++--- > gdb/inferior.c | 2 +- > gdb/linux-nat.c | 2 +- > gdb/netbsd-nat.c | 2 +- > gdb/thread.c | 14 ++++++++++---- > 6 files changed, 17 insertions(+), 11 deletions(-) > > 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 835d07dc660..3bd9598907d 100644 > --- a/gdb/gdbthread.h > +++ b/gdb/gdbthread.h > @@ -969,9 +969,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 f141ba19ea4..5ac61316445 100644 > --- a/gdb/linux-nat.c > +++ b/gdb/linux-nat.c > @@ -3963,7 +3963,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 861eca3591d..4e1f1ad17ac 100644 > --- a/gdb/thread.c > +++ b/gdb/thread.c > @@ -785,11 +785,17 @@ 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 ()) > - if (tp.state () == THREAD_EXITED) > - delete_thread (&tp); > + { > + if (target != nullptr > + && tp.inf->process_target () != target) > + continue; We have "all_threads", which takes an optional target pointer (to do exactly what you are doing here), and all_threads_safe, which doesn't take a target. Could you check if it's relatively easy to make all_threads_safe accept a target too? Simon