From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id wLnpDNbrqWY6PTcAWB0awg (envelope-from ) for ; Wed, 31 Jul 2024 03:46:30 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=D/meXoyh; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=vowdnqNy; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=D/meXoyh; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=vowdnqNy; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 20B881E0D0; Wed, 31 Jul 2024 03:46:30 -0400 (EDT) Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (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 E291B1E097 for ; Wed, 31 Jul 2024 03:46:27 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 8DE733858283 for ; Wed, 31 Jul 2024 07:46:27 +0000 (GMT) Received: from smtp-out2.suse.de (smtp-out2.suse.de [IPv6:2a07:de40:b251:101:10:150:64:2]) by sourceware.org (Postfix) with ESMTPS id 10D563858C56 for ; Wed, 31 Jul 2024 07:46:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 10D563858C56 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 10D563858C56 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a07:de40:b251:101:10:150:64:2 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1722411971; cv=none; b=HYQCTI4deKBX2zpgnhhM7HtXeMoDx60ywp6nzCA1Uw1AG5K4XUI1CAO4AqxQTJF9H0+TFSFY3Jeo6lPLwkEgo/t48cm5mhclkHQzQnSaFhZ388r6FmoX5zNXk0jUzi1GFahhzvH/Vh7tJC9mJlC/+r1llpXlvM1c/88QhXfhJDc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1722411971; c=relaxed/simple; bh=bcg3wLCV7kDFsKyGv7MtwDTUx51GayE2fUReDzoU4ik=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-Id:MIME-Version; b=m1AAZP83+/przLCmDxYVviv2CZk/VJ+xBXm9eDV2aN3uIIfKR8KpyWXjlf9jPYzhyEnSs74VlDEKazcTgC8y0bx4jxg1X1Mjzvi5HBNm6P9NmkNm7BjBi7uCkAoiDMs+3y9pBHTJ7uJGzXMCWCuFbmDC0o4+dy+cEhRh7MCy6KY= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from imap1.dmz-prg2.suse.org (unknown [10.150.64.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 1449E1F83B for ; Wed, 31 Jul 2024 07:46:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1722411968; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=O5TMZYqGAnuEfwvwbaxrcg0DLN/WXEHNsfFcb2vKV2U=; b=D/meXoyhixzgOcwFMuykU1cBHNoQChGVUxiSxqH84diI5ZduCeBEQ+oS1G/arpT/t8KfPn d35zrpihXi7gvAULgIr1347p57z72nsAwtOspC5LflqwHHT62vxY2c6SGGsiZCtpUCQ2BD vFTZqbWq2fdtTKsglZWRG1gqs/cAFUQ= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1722411968; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=O5TMZYqGAnuEfwvwbaxrcg0DLN/WXEHNsfFcb2vKV2U=; b=vowdnqNyP9F1piatl3MeXsR75sEIho8bF2aOYpIvIOarQPvVbFri8lhxE6bmswI3Xi/JK3 FW4uaCfFOTsH7TBA== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1722411968; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=O5TMZYqGAnuEfwvwbaxrcg0DLN/WXEHNsfFcb2vKV2U=; b=D/meXoyhixzgOcwFMuykU1cBHNoQChGVUxiSxqH84diI5ZduCeBEQ+oS1G/arpT/t8KfPn d35zrpihXi7gvAULgIr1347p57z72nsAwtOspC5LflqwHHT62vxY2c6SGGsiZCtpUCQ2BD vFTZqbWq2fdtTKsglZWRG1gqs/cAFUQ= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1722411968; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=O5TMZYqGAnuEfwvwbaxrcg0DLN/WXEHNsfFcb2vKV2U=; b=vowdnqNyP9F1piatl3MeXsR75sEIho8bF2aOYpIvIOarQPvVbFri8lhxE6bmswI3Xi/JK3 FW4uaCfFOTsH7TBA== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id EC8EB13ADB for ; Wed, 31 Jul 2024 07:46:07 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id tik6OL/rqWZ0fAAAD6G6ig (envelope-from ) for ; Wed, 31 Jul 2024 07:46:07 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH v2] [gdb] Prune inferior after switching inferior Date: Wed, 31 Jul 2024 09:46:05 +0200 Message-Id: <20240731074605.12070-1-tdevries@suse.de> X-Mailer: git-send-email 2.35.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Level: X-Spamd-Result: default: False [-2.60 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; MIME_GOOD(-0.10)[text/plain]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; ARC_NA(0.00)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; FUZZY_BLOCKED(0.00)[rspamd.com]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; RCVD_TLS_ALL(0.00)[] X-Spam-Score: -2.60 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org 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 Usually with test-case gdb.python/py-progspace-events.exp I get: ... (gdb) inferior 1^M [Switching to inferior 1 [process 4116] (py-progspace-events)]^M [Switching to thread 1.1 (Thread 0xf77d0ce0 (LWP 4116))]^M 28 { /* Nothing. */ }^M (gdb) PASS: gdb.python/py-progspace-events.exp: inferior 1 step^M FreeProgspaceEvent: ^M do_parent_stuff () at py-progspace-events.c:41^M 41 ++global_var;^M (gdb) PASS: gdb.python/py-progspace-events.exp: step ... But occasionally I run into the following FAIL: ... (gdb) inferior 1^M [Switching to inferior 1 [process 5199] (py-progspace-events)]^M [Switching to thread 1.1 (Thread 0xf77d0ce0 (LWP 5199))]^M 28 { /* Nothing. */ }^M (gdb) FreeProgspaceEvent: ^M FAIL: gdb.python/py-progspace-events.exp: inferior 1 (timeout) ... This is caused by a race between the handling of an event, and the "inferior 1" command. In the passing case, the event is handled first. During which prune_inferiors is called, but it can't remove inferior 2, because it's still the current one. In the failing case, the "inferior 1" command is handled first. Then during handling of the event, prune_inferiors is called, and it can remove inferior 2 because it's no longer the current one. This looks like a test-case issue to me, but ISTM that we can do better: by calling prune_inferiors asap, at the end of the "inferior 1" command, we stabilize the moment when the inferior is removed: ... (gdb) inferior 1^M [Switching to inferior 1 [process 5199] (py-progspace-events)]^M [Switching to thread 1.1 (Thread 0xf77d0ce0 (LWP 5199))]^M 28 { /* Nothing. */ }^M FreeProgspaceEvent: ^M (gdb) PASS: gdb.python/py-progspace-events.exp: inferior 1 ... This also allows us to simplify the test-case by removing the step command, which is no longer required to trigger the pruning of the inferior. Tested on x86_64-linux. PR gdb/31440 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31440 --- gdb/inferior.c | 4 +++ .../gdb.python/py-progspace-events.exp | 31 +++---------------- 2 files changed, 9 insertions(+), 26 deletions(-) diff --git a/gdb/inferior.c b/gdb/inferior.c index 6a197679902..bc9e5ee58d4 100644 --- a/gdb/inferior.c +++ b/gdb/inferior.c @@ -790,6 +790,10 @@ inferior_command (const char *args, int from_tty) notify_user_selected_context_changed (USER_SELECTED_INFERIOR); } + + /* Switching current inferior may have made one of the inferiors + prunable, so prune it. */ + prune_inferiors (); } } diff --git a/gdb/testsuite/gdb.python/py-progspace-events.exp b/gdb/testsuite/gdb.python/py-progspace-events.exp index 95e4ca8da0b..9dfc7573d40 100644 --- a/gdb/testsuite/gdb.python/py-progspace-events.exp +++ b/gdb/testsuite/gdb.python/py-progspace-events.exp @@ -79,37 +79,16 @@ gdb_test "continue" \ "\\\[Inferior $decimal \[^\r\n\]+ exited normally\\\]"] \ "continue until inferior 2 exits" -gdb_test "inferior 1" "\\\[Switching to inferior 1 .*" - -# Step the inferior. During this process GDB will prune the now +# Switch to inferior 1. During this process GDB will prune the now # defunct inferior, which deletes its program space, which should # trigger the FreeProgspaceEvent. # -# However, there is a slight problem. When the target is remote, and -# GDB is accessing files using remote fileio, then GDB will attempt to -# prune the inferior at a point in time when the remote target is -# waiting for a stop reply. Pruning an inferior causes GDB to close -# files associated with that inferior. -# -# In non-async mode we can't send fileio packets while waiting for a -# stop reply, so the attempts to close files fails, and this shows up -# as an error. -# -# As this error has nothing to do with the feature being tested here, -# we just accept the error message, the important part is the -# 'FreeProgspaceEvent' string, so long as that appears (just once) -# then the test is a success. -set warning_msg \ - [multi_line \ - "warning: cannot close \"\[^\r\n\]+\": Cannot execute this command while the target is running\\." \ - "Use the \"interrupt\" command to stop the target" \ - "and then try again\\."] -gdb_test "step" \ +gdb_test "inferior 1" \ [multi_line \ - "^FreeProgspaceEvent.*: (?:\r\n$warning_msg)*" \ - "do_parent_stuff \\(\\) at \[^\r\n\]+" \ - "$decimal\\s+\[^\r\n\]+"] + "\\\[Switching to inferior 1 .*" \ + ".*" \ + "FreeProgspaceEvent.*: "] # Let this inferior run to completion. gdb_continue_to_end base-commit: 762f95fdc65f9fb138d77bed44d77b8fd947dc44 -- 2.35.3