From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 78658 invoked by alias); 14 Nov 2018 22:32:18 -0000 Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org Received: (qmail 78646 invoked by uid 89); 14 Nov 2018 22:32:16 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy=HTo:U*paul, sigset_t X-HELO: smtp.polymtl.ca Received: from smtp.polymtl.ca (HELO smtp.polymtl.ca) (132.207.4.11) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 14 Nov 2018 22:32:15 +0000 Received: from simark.ca (simark.ca [158.69.221.121]) (authenticated bits=0) by smtp.polymtl.ca (8.14.7/8.14.7) with ESMTP id wAEMW809021334 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 14 Nov 2018 17:32:13 -0500 Received: by simark.ca (Postfix, from userid 112) id 82EB11E93F; Wed, 14 Nov 2018 17:32:08 -0500 (EST) Received: from simark.ca (localhost [127.0.0.1]) by simark.ca (Postfix) with ESMTP id E69441E182; Wed, 14 Nov 2018 17:32:06 -0500 (EST) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Wed, 14 Nov 2018 22:32:00 -0000 From: Simon Marchi To: paul@mad-scientist.net Cc: gdb@sourceware.org Subject: Re: GDB (not) handling SIGINT...? In-Reply-To: <8003dfcd98e9a4d1e43f53220e0d446669944ead.camel@mad-scientist.net> References: <8003dfcd98e9a4d1e43f53220e0d446669944ead.camel@mad-scientist.net> Message-ID: <17a7ce8aa190956bd7a8ba9bd7cdea16@polymtl.ca> X-Sender: simon.marchi@polymtl.ca User-Agent: Roundcube Webmail/1.3.6 X-IsSubscribed: yes X-SW-Source: 2018-11/txt/msg00003.txt.bz2 On 2018-11-13 17:37, Paul Smith wrote: > Hi all; I'm using GDB 8.1 on a modern 64bit GNU/Linux system (Ubuntu > 18.04LTS). > > Recently I added a call to sigtimedwait() for SIGINT into my > (multithreaded) program and now I'm having an issue with GDB. > > What I want is that if I attach to my program then continue, then use > ^C at the GDB terminal, I should get a (gdb) prompt back but I do NOT > want the SIGINT delivered to my program to wake up my sigtimedwait() > call (because it will cause my program to do various things that I > don't want it to do). > > I see that SIGINT is set to nopass: > > (gdb) info signals SIGINT > Signal Stop Print Pass to program Description > SIGINT Yes Yes No Interrupt > > but yet when I use ^C at the GDB prompt my sigtimedwait() call inside > my program does return with "2" (SIGINT), which I don't want. > > I guess I don't understand what the docs mean when they say that the > signal is not passed to the process under debug. Note that in my case > I'm attaching to the program from a completely different terminal so > there's no issue with process groups etc. and as far as I can > understand it, the signal should only be delivered to GDB not my > process, so unless there's some weird magic at work here it must be GDB > forwarding that signal to my process. > > Anyone have any thoughts about this? > > Cheers! I was able to reproduce it with, it really sounds like a bug. If others want to try, here's my test program: #include #include #include int main() { sigset_t set; sigemptyset(&set); sigaddset(&set, SIGINT); sigprocmask(SIG_BLOCK, &set, NULL); for (int i = 0; i < 10; i++) { int n = sigwaitinfo(&set, NULL); printf("signal %d\n", n); } } Run in a terminal, attach with GDB in another terminal, continue, then ctrl-C in GDB's terminal. The first call to sigwaitinfo returns -1, I think it's expected as the syscall gets interrupted. But the subsequent calls return 2, showing that indeed the process has received a SIGINT. Paul, could you please file a bug? You can re-use this test program if you want. Simon