summaryrefslogtreecommitdiffstats
path: root/unwind.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2020-04-14 06:17:21 -0700
committerKaz Kylheku <kaz@kylheku.com>2020-04-14 06:17:21 -0700
commita506664be6f93a51152cb7c25fad1f9466ebc78c (patch)
tree77d7123e096fe41aaf01fe9aea6ba96e01b3cb48 /unwind.c
parent386d7143b677979e02392bb8750aea1da00fb687 (diff)
downloadtxr-a506664be6f93a51152cb7c25fad1f9466ebc78c.tar.gz
txr-a506664be6f93a51152cb7c25fad1f9466ebc78c.tar.bz2
txr-a506664be6f93a51152cb7c25fad1f9466ebc78c.zip
unwind: regression: signal mask restoring.
We have a regression introduced in TXR 230, as part of the bugfix for the extended_setjmp crash caused by PIE executables. This bug (for instance) causes signal handling to misbehave after TXR handles a single asynchronous signal. In the REPL, if the user interrupts a (usleep ...) operation with Ctrl-C, it is afterward not possible to issue any more Ctrl-C interrupts, asynchronous or not. The reason is that an asynchronous interrupt directly throws an exception out of the signal handler. Then the botched restoring of the signal mask in extjmp_restore will install the wrong signal mask, causing the signal to be blocked. * unwind.c (extjmp_restore): Remove stray statement that clobbers the saved mask of blocked signals. This was accidentally been copy-and-pasted from extjmp_save.
Diffstat (limited to 'unwind.c')
-rw-r--r--unwind.c1
1 files changed, 0 insertions, 1 deletions
diff --git a/unwind.c b/unwind.c
index 408cb67c..6459a5e1 100644
--- a/unwind.c
+++ b/unwind.c
@@ -1214,7 +1214,6 @@ void extjmp_restore(extended_jmp_buf *ejb)
gc_prot_top = ejb->gc_pt;
#if HAVE_POSIX_SIGS
async_sig_enabled = ejb->se;
- ejb->blocked.set = sig_blocked_cache.set;
sig_mask(SIG_SETMASK,
strip_qual(small_sigset_t *, &ejb->blocked), 0);