From: Doug Evans <xdje42@gmail.com>
To: gdb-patches@sourceware.org
Cc: guile-devel@gnu.org
Subject: [RFC] Block all async signals used by gdb when initializing Guile
Date: Sat, 29 Aug 2015 10:22:11 -0700 [thread overview]
Message-ID: <m3r3mmdn7g.fsf@sspiff.org> (raw)
Hi.
When Guile initializes it will start several GC threads (libgc).
It's important that these threads block SIGCHLD (PR 17247).
This patch extends this to all async signals used by gdb.
One improvement on this patch would be to have event-top.c (or some
such) provide a routine that calls sigaddset for each appropriate
signal rather than defining the list in guile.c.
2015-08-29 Doug Evans <xdje42@gmail.com>
* guile/guile.c (_initialize_guile): Block all asynchronous signals
used by gdb when initializing Guile.
diff --git a/gdb/guile/guile.c b/gdb/guile/guile.c
index 4abf5c5..e9ef70b 100644
--- 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
/* scm_with_guile is the most portable way to initialize Guile.
next reply other threads:[~2015-08-29 17:22 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-29 17:22 Doug Evans [this message]
2015-08-29 19:11 ` [RFC] Block all async signals used by gdb when initializing Guile Eli Zaretskii
2015-08-29 19:20 ` Doug Evans
2015-08-29 20:16 ` Eli Zaretskii
2015-08-29 20:39 ` Doug Evans
2015-08-29 21:04 ` Mark Kettenis
2015-08-30 2:37 ` Eli Zaretskii
2015-09-01 5:05 ` Doug Evans
2015-09-01 14:35 ` Eli Zaretskii
2015-09-01 15:22 ` Doug Evans
2015-09-01 15:50 ` Eli Zaretskii
2015-08-30 2:35 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m3r3mmdn7g.fsf@sspiff.org \
--to=xdje42@gmail.com \
--cc=gdb-patches@sourceware.org \
--cc=guile-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).