From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by sourceware.org (Postfix) with ESMTPS id 4DA34386EC32 for ; Tue, 6 Oct 2020 16:12:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 4DA34386EC32 IronPort-SDR: 7uipJBTFXXwE34lwlBIAKcc1FRAMgQweQGTnjlvCR82vsvRNGiEepzJTXuXsaZuP/EuRTCqdTT njVZG6jt/WWw== X-IronPort-AV: E=McAfee;i="6000,8403,9765"; a="163785092" X-IronPort-AV: E=Sophos;i="5.77,343,1596524400"; d="scan'208";a="163785092" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Oct 2020 09:05:54 -0700 IronPort-SDR: L9tMTj1utwQUA/V7vPd/Rnx3ptZsEOmdEDGXA1UUQOq30oiG1ONo/vP+sXb2utqPktaAp0Ku6M 5oro4jP2zWLg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,343,1596524400"; d="scan'208";a="348542642" Received: from irvmail001.ir.intel.com ([163.33.26.43]) by fmsmga002.fm.intel.com with ESMTP; 06 Oct 2020 09:05:53 -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 096G5rOv028171; Tue, 6 Oct 2020 17:05:53 +0100 Received: from ulvlx001.iul.intel.com (localhost [127.0.0.1]) by ulvlx001.iul.intel.com with ESMTP id 096G5rwI025258; Tue, 6 Oct 2020 18:05:53 +0200 Received: (from taktemur@localhost) by ulvlx001.iul.intel.com with LOCAL id 096G5q7k025254; Tue, 6 Oct 2020 18:05:53 +0200 From: Tankut Baris Aktemur To: gdb-patches@sourceware.org Subject: [PATCH] gdb: restore thread after detaching from an inferior Date: Tue, 6 Oct 2020 18:05:37 +0200 Message-Id: <1602000337-24945-1-git-send-email-tankut.baris.aktemur@intel.com> X-Mailer: git-send-email 1.7.0.7 X-Spam-Status: No, score=-15.6 required=5.0 tests=AC_FROM_MANY_DOTS, BAYES_00, GIT_PATCH_0, KAM_DMARC_NONE, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, 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: Tue, 06 Oct 2020 16:12:14 -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) Prevent this by restoring the current thread. gdb/ChangeLog: 2020-10-06 Tankut Baris Aktemur * inferior.c (detach_inferior_command): Restore the current thread. gdb/testsuite/ChangeLog: 2020-10-06 Tankut Baris Aktemur * gdb.base/kill-detach-inferiors-cmd.exp: Check that 'detach inferiors' does not change the current inferior. --- gdb/inferior.c | 2 ++ gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp | 1 + 2 files changed, 3 insertions(+) diff --git a/gdb/inferior.c b/gdb/inferior.c index f775938721d..040ebc59354 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 ()) { diff --git a/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp b/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp index 82e0c712c8f..d7e490ce8c1 100644 --- a/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp +++ b/gdb/testsuite/gdb.base/kill-detach-inferiors-cmd.exp @@ -49,6 +49,7 @@ gdb_test_no_output "kill inferiors 1 2" 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 .*" "inf 1 is still current" # No inferiors should be running anymore. gdb_test "kill inferiors 1 2 3" \ -- 2.17.1