summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2014-08-01 22:09:24 -0700
committerKaz Kylheku <kaz@kylheku.com>2014-08-01 22:09:24 -0700
commit3c616876604219141ad1088e372c91928508f089 (patch)
tree24d70ed56ae73ac1efdf483d03d5cedc1d3b76f4
parent94dd3a05573c6fdd0662478ed5d57cef9d7e8b81 (diff)
downloadtxr-3c616876604219141ad1088e372c91928508f089.tar.gz
txr-3c616876604219141ad1088e372c91928508f089.tar.bz2
txr-3c616876604219141ad1088e372c91928508f089.zip
* signal.c (set_sig_handler): Don't use SA_ONSTACK
except for signals for which we use alt stack. * signal.h (sig_save_enable): Do sig_check before enabling async signals. This caused the !async_sig_enabled assertion to trip inside make_obj.
-rw-r--r--ChangeLog9
-rw-r--r--signal.c5
-rw-r--r--signal.h2
3 files changed, 13 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 2f55e65c..dbcb0a68 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2014-08-01 Kaz Kylheku <kaz@kylheku.com>
+ * signal.c (set_sig_handler): Don't use SA_ONSTACK
+ except for signals for which we use alt stack.
+
+ * signal.h (sig_save_enable): Do sig_check before
+ enabling async signals. This caused the !async_sig_enabled assertion
+ to trip inside make_obj.
+
+2014-08-01 Kaz Kylheku <kaz@kylheku.com>
+
* signal.c (sig_hup, sig_int, sig_quit, sig_ill, sig_trap, sig_abrt,
sig_bus, sig_fpe, sig_kill, sig_usr1, sig_segv, sig_usr2, sig_pipe,
sig_alrm, sig_term, sig_chld, sig_cont, sig_stop, sig_tstp, sig_ttin,
diff --git a/signal.c b/signal.c
index 33aa2282..305fee89 100644
--- a/signal.c
+++ b/signal.c
@@ -236,9 +236,10 @@ val set_sig_handler(val signo, val lambda)
sa.sa_handler = sig_handler;
sigfillset(&sa.sa_mask);
#if HAVE_SIGALTSTACK
- if (sig == SIGSEGV || sig == SIGBUS)
+ if (sig == SIGSEGV || sig == SIGBUS) {
setup_alt_stack();
- sa.sa_flags |= SA_ONSTACK;
+ sa.sa_flags |= SA_ONSTACK;
+ }
#endif
sigaction(sig, &sa, 0);
}
diff --git a/signal.h b/signal.h
index 90c63721..63a9bb8d 100644
--- a/signal.h
+++ b/signal.h
@@ -30,9 +30,9 @@
#define sig_save_enable \
do { \
int sig_save = async_sig_enabled; \
- async_sig_enabled = 1; \
if (!sig_save) \
sig_check(); \
+ async_sig_enabled = 1; \
{ \
typedef void v_o_i_d