From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by sourceware.org (Postfix) with ESMTPS id 73081385703F for ; Wed, 28 Oct 2020 17:12:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 73081385703F IronPort-SDR: Cam5GiFRrdiz/DNXdv/WAjyWDz1LAY/PWZxV8F0ymUdMO6/KSwR8Wg9c5f2die/mPDMXJ17Ist NIicQVTNNWgQ== X-IronPort-AV: E=McAfee;i="6000,8403,9788"; a="186060970" X-IronPort-AV: E=Sophos;i="5.77,427,1596524400"; d="scan'208";a="186060970" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 28 Oct 2020 10:12:26 -0700 IronPort-SDR: MPRUffHj6Kv3lpJe2PP0j6K0mrWFdxD+GrmdaSwfcXpugaBZ2I9BEkEJZWp5vzRznpSUpZf1pC 22kyg5cYhArg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,427,1596524400"; d="scan'208";a="351081477" Received: from irvmail001.ir.intel.com ([163.33.26.43]) by fmsmga004.fm.intel.com with ESMTP; 28 Oct 2020 10:12:25 -0700 Received: from ulvlx001.iul.intel.com (ulvlx001.iul.intel.com [172.28.207.17]) by irvmail001.ir.intel.com (8.14.3/8.13.6/MailSET/Hub) with ESMTP id 09SHCP16006902; Wed, 28 Oct 2020 17:12:25 GMT Received: from ulvlx001.iul.intel.com (localhost [127.0.0.1]) by ulvlx001.iul.intel.com with ESMTP id 09SHCOKk029101; Wed, 28 Oct 2020 18:12:24 +0100 Received: (from taktemur@localhost) by ulvlx001.iul.intel.com with LOCAL id 09SHCO1f029097; Wed, 28 Oct 2020 18:12:24 +0100 From: Tankut Baris Aktemur To: gdb-patches@sourceware.org Subject: [PATCH v2] gdb: restore thread after detaching or killing an inferior Date: Wed, 28 Oct 2020 18:12:19 +0100 Message-Id: <1603905139-28858-1-git-send-email-tankut.baris.aktemur@intel.com> X-Mailer: git-send-email 1.7.0.7 In-Reply-To: <1602000337-24945-1-git-send-email-tankut.baris.aktemur@intel.com> X-Spam-Status: No, score=-17.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 28 Oct 2020 17:12:29 -0000 The "detach inferiors N" command causes the current inferior to switch. E.g.: $ gdb a.out Reading symbols from a.out... (gdb) start ... (gdb) add-inferior [New inferior 2] Added inferior 2 on connection 1 (native) (gdb) inferior 2 [Switching to inferior 2 [] ()] (gdb) info inferiors Num Description Connection Executable 1 process 18242 1 (native) /path/to/a.out * 2 1 (native) (gdb) detach inferiors 1 Detaching from program: /path/to/a.out, process 18242 [Inferior 1 (process 18242) detached] (gdb) info inferiors Num Description Connection Executable * 1 /path/to/a.out 2 1 (native) (gdb) The same switch happens with the "kill inferiors N" command. Prevent it by restoring the current thread. gdb/ChangeLog: 2020-10-06 Tankut Baris Aktemur PR gdb/19318 * inferior.c (detach_inferior_command): Restore the current thread. (kill_inferior_command): Ditto. gdb/testsuite/ChangeLog: 2020-10-06 Tankut Baris Aktemur * gdb.base/kill-detach-inferiors-cmd.exp: Check that 'kill inferiors' and 'detach inferiors' do not change the current inferior. --- gdb/inferior.c | 4 ++++ gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp | 2 ++ 2 files changed, 6 insertions(+) diff --git a/gdb/inferior.c b/gdb/inferior.c index f775938721d..f06c13bbca4 100644 --- a/gdb/inferior.c +++ b/gdb/inferior.c @@ -547,6 +547,8 @@ detach_inferior_command (const char *args, int from_tty) if (!args || !*args) error (_("Requires argument (inferior id(s) to detach)")); + scoped_restore_current_thread restore_thread; + number_or_range_parser parser (args); while (!parser.finished ()) { @@ -584,6 +586,8 @@ kill_inferior_command (const char *args, int from_tty) if (!args || !*args) error (_("Requires argument (inferior id(s) to kill)")); + scoped_restore_current_thread restore_thread; + number_or_range_parser parser (args); while (!parser.finished ()) { diff --git a/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp b/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp index 82e0c712c8f..06887601de4 100644 --- a/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp +++ b/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp @@ -46,9 +46,11 @@ gdb_test "attach $test_pid" "Attaching to process.*" "attach to pid" # Kill the first two inferiors, and detach the third. gdb_test_no_output "kill inferiors 1 2" +gdb_test "info inferiors 3" "\r\n\\* 3 \[^\r\n\]+" "inf 3 is still current" gdb_test "inferior 1" "Switching to inferior 1.*" gdb_test "kill" "The program is not being run.*" gdb_test "detach inferiors 3" "Detaching from program.*process $test_pid.*" +gdb_test "info inferiors 1" "\r\n\\* 1 \[^\r\n\]+" "inf 1 is still current" # No inferiors should be running anymore. gdb_test "kill inferiors 1 2 3" \ -- 2.17.1