From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca (simark.ca [158.69.221.121]) by sourceware.org (Postfix) with ESMTPS id 1CF7D385E003 for ; Wed, 25 Mar 2020 15:57:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 1CF7D385E003 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=simark.ca Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=simark@simark.ca Received: from [10.0.0.11] (unknown [192.222.164.54]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id 280701E5F9; Wed, 25 Mar 2020 11:57:26 -0400 (EDT) Subject: Re: [PATCH][gdb] Fix hang after ext sigkill To: Tom de Vries , gdb-patches@sourceware.org Cc: Pedro Alves References: <20200224201403.GA7079@delia> <831161db-85a9-74da-1833-7bab3cc41d15@suse.de> <4fc1ee75-397b-8c05-14a9-fcedf584e8b8@suse.de> From: Simon Marchi Message-ID: <31693a49-2549-3d2a-df54-b1816875682e@simark.ca> Date: Wed, 25 Mar 2020 11:57:25 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <4fc1ee75-397b-8c05-14a9-fcedf584e8b8@suse.de> Content-Type: text/plain; charset=utf-8 Content-Language: en-US-large Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-14.8 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, 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, 25 Mar 2020 15:57:28 -0000 On 2020-03-25 11:51 a.m., Tom de Vries wrote: > On 25-03-2020 15:44, Simon Marchi wrote: >> On 2020-03-25 6:29 a.m., Tom de Vries wrote: >>> Here's the updated patch. >> Thanks. Some comments about the test: >> >> - Please add a comment at the top to describe briefly what this is testing. >> - Please replace the infinite loops with bounded ones (e.g. for (i = 0; i < 300; i++)), >> so that the test program eventually exits if something goes wrong and it is allowed to run >> freely. > Done. > > Thanks, > - Tom > > > > 0001-gdb-Fix-hang-after-ext-sigkill.patch > > [gdb] Fix hang after ext sigkill > > Consider the test-case from this patch, compiled with pthread support: > ... > $ gcc src/gdb/testsuite/gdb.threads/hang-after-ext-sigkill.c -lpthread > ... > > After running, the program sleeps: > ... > $ gdb a.out > Reading symbols from a.out... > (gdb) r > Starting program: /data/gdb_versions/devel/a.out > [Thread debugging using libthread_db enabled] > Using host libthread_db library "/lib64/libthread_db.so.1". > [New Thread 0x7ffff77fe700 (LWP 22604)] > ... > > Until we interrupt it with a control-C: > ... > ^C > Thread 1 "a.out" received signal SIGINT, Interrupt. > 0x00007ffff78c50f0 in nanosleep () from /lib64/libc.so.6 > (gdb) > ... > > If we then kill the inferior using an external SIGKILL: > ... > (gdb) shell killall -s SIGKILL a.out > ... > and subsequently continue: > ... > (gdb) c > Continuing. > Couldn't get registers: No such process. > Couldn't get registers: No such process. > (gdb) Couldn't get registers: No such process. > (gdb) Couldn't get registers: No such process. > (gdb) Couldn't get registers: No such process. > > ... > gdb hangs repeating the same warning. Typing control-C no longer helps, > and we have to kill gdb. > > This is a regression since commit 873657b9e8 "Preserve selected thread in > all-stop w/ background execution". The commit adds a > scoped_restore_current_thread typed variable restore_thread to > fetch_inferior_event, and the hang is caused by the constructor throwing an > exception. > > Fix this by catching the exception in the constructor. > > Build and reg-tested on x86_64-linux. > > gdb/ChangeLog: > > 2020-02-24 Tom de Vries > > PR gdb/25471 > * thread.c > (scoped_restore_current_thread::scoped_restore_current_thread): Catch > exception in get_frame_id. > > gdb/testsuite/ChangeLog: > > 2020-02-24 Tom de Vries > > PR gdb/25471 > * gdb.threads/hang-after-ext-sigkill.c: New test. > * gdb.threads/hang-after-ext-sigkill.exp: New file. > * lib/gdb.exp (runto): Handle "Temporary breakpoint" string. This is fine with me, but I'd prefer Pedro to take a look if he has time. Given the current situation, give him a few weeks, if you don't have any answers by then, then push it. Simon