summaryrefslogtreecommitdiff
path: root/boehm-gc
diff options
context:
space:
mode:
authorbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>1999-12-24 01:08:34 +0000
committerbryce <bryce@138bc75d-0d04-0410-961f-82ee72b054a4>1999-12-24 01:08:34 +0000
commit9b4473df17c0dbcaee164d0dd4f0322fd1cb4861 (patch)
tree6266c2f2f127c1ae587f061144542fbea3ecdc9d /boehm-gc
parentc1a11bafafd99ed95cc95ba1c9ea735de2d3d55d (diff)
downloadgcc-9b4473df17c0dbcaee164d0dd4f0322fd1cb4861.tar.gz
1999-12-22 Bryce McKinlay <bryce@albatross.co.nz>
* linux_threads.c: Don't block SIGINT, SIGQUIT, SIGTERM in the NO_SIGNALS case. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31083 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'boehm-gc')
-rw-r--r--boehm-gc/ChangeLog5
-rw-r--r--boehm-gc/linux_threads.c20
2 files changed, 25 insertions, 0 deletions
diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog
index f367b2c0865..5e39dd05778 100644
--- a/boehm-gc/ChangeLog
+++ b/boehm-gc/ChangeLog
@@ -1,3 +1,8 @@
+1999-12-22 Bryce McKinlay <bryce@albatross.co.nz>
+
+ * linux_threads.c: Don't block SIGINT, SIGQUIT, SIGTERM in the
+ NO_SIGNALS case.
+
1999-12-19 Jeff Sturm <jsturm@sigma6.com>
* gcconfig.h: Define DATASTART for Alpha Linux.
diff --git a/boehm-gc/linux_threads.c b/boehm-gc/linux_threads.c
index 8287dce647b..4d98062d11c 100644
--- a/boehm-gc/linux_threads.c
+++ b/boehm-gc/linux_threads.c
@@ -173,6 +173,11 @@ void GC_suspend_handler(int sig)
/* is no race. */
if (sigfillset(&mask) != 0) ABORT("sigfillset() failed");
if (sigdelset(&mask, SIG_RESTART) != 0) ABORT("sigdelset() failed");
+#ifdef NO_SIGNALS
+ if (sigdelset(&mask, SIGINT) != 0) ABORT("sigdelset() failed");
+ if (sigdelset(&mask, SIGQUIT) != 0) ABORT("sigdelset() failed");
+ if (sigdelset(&mask, SIGTERM) != 0) ABORT("sigdelset() failed");
+#endif
do {
me->signal = 0;
sigsuspend(&mask); /* Wait for signal */
@@ -433,6 +438,21 @@ void GC_thr_init()
if (sigfillset(&act.sa_mask) != 0) {
ABORT("sigfillset() failed");
}
+
+#ifdef NO_SIGNALS
+ if (sigdelset(&act.sa_mask, SIGINT) != 0) {
+ ABORT("sigdelset() failed");
+ }
+
+ if (sigdelset(&act.sa_mask, SIGQUIT) != 0) {
+ ABORT("sigdelset() failed");
+ }
+
+ if (sigdelset(&act.sa_mask, SIGTERM) != 0) {
+ ABORT("sigdelset() failed");
+ }
+#endif
+
/* SIG_RESTART is unmasked by the handler when necessary. */
act.sa_handler = GC_suspend_handler;
if (sigaction(SIG_SUSPEND, &act, NULL) != 0) {