From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 111866 invoked by alias); 29 Aug 2015 19:11:27 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 111857 invoked by uid 89); 29 Aug 2015 19:11:26 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.1 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_NONE,SPF_SOFTFAIL autolearn=no version=3.3.2 X-HELO: mtaout24.012.net.il Received: from mtaout24.012.net.il (HELO mtaout24.012.net.il) (80.179.55.180) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 29 Aug 2015 19:11:24 +0000 Received: from conversion-daemon.mtaout24.012.net.il by mtaout24.012.net.il (HyperSendmail v2007.08) id <0NTU00O00Y4HG300@mtaout24.012.net.il> for gdb-patches@sourceware.org; Sat, 29 Aug 2015 22:03:30 +0300 (IDT) Received: from HOME-C4E4A596F7 ([84.94.185.246]) by mtaout24.012.net.il (HyperSendmail v2007.08) with ESMTPA id <0NTU00OIVY9UP500@mtaout24.012.net.il>; Sat, 29 Aug 2015 22:03:30 +0300 (IDT) Date: Sat, 29 Aug 2015 19:11:00 -0000 From: Eli Zaretskii Subject: Re: [RFC] Block all async signals used by gdb when initializing Guile In-reply-to: To: Doug Evans Cc: gdb-patches@sourceware.org, guile-devel@gnu.org Reply-to: Eli Zaretskii Message-id: <831tel3o68.fsf@gnu.org> References: X-IsSubscribed: yes X-SW-Source: 2015-08/txt/msg00836.txt.bz2 > From: Doug Evans > cc: guile-devel@gnu.org > Date: Sat, 29 Aug 2015 10:22:11 -0700 > > --- a/gdb/guile/guile.c > +++ b/gdb/guile/guile.c > @@ -847,7 +847,7 @@ _initialize_guile (void) > #if HAVE_GUILE > { > #ifdef HAVE_SIGPROCMASK > - sigset_t sigchld_mask, prev_mask; > + sigset_t guile_init_mask, prev_mask; > #endif > > /* The Python support puts the C side in module "_gdb", leaving the Python > @@ -867,9 +867,23 @@ _initialize_guile (void) > have SIGCHLD blocked. PR 17247. > Really libgc and Guile should do this, but we need to work with > libgc 7.4.x. */ > - sigemptyset (&sigchld_mask); > - sigaddset (&sigchld_mask, SIGCHLD); > - sigprocmask (SIG_BLOCK, &sigchld_mask, &prev_mask); > + sigemptyset (&guile_init_mask); > + sigaddset (&guile_init_mask, SIGCHLD); > + /* Also block other asynchronous signals used by GDB. See event-top.c. > + Really we want to block every signal here except for those specifically > + used by Guile (e.g., GC threads), but this is safer for now. */ > + sigaddset (&guile_init_mask, SIGINT); > + sigaddset (&guile_init_mask, SIGTERM); > +#ifdef SIGQUIT > + sigaddset (&guile_init_mask, SIGQUIT); > +#endif > +#ifdef SIGHUP > + sigaddset (&guile_init_mask, SIGHUP); > +#endif > +#ifdef SIGWINCH > + sigaddset (&guile_init_mask, SIGWINCH); > +#endif > + sigprocmask (SIG_BLOCK, &guile_init_mask, &prev_mask); > #endif What about platforms that don't have sigprocmask, but do have SIGINT? Don't we want to block SIGINT on those platforms?