diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2013-12-13 07:49:21 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2013-12-13 07:49:21 -0800 |
commit | bdd1a3fa274078dd37da6df64bb93b3b183fa7cb (patch) | |
tree | 8b4ad16049ac218b0f8f0780855d3c3307a45803 /signal.c | |
parent | f3b0217d7a5d9d050f0781defa5339ef29a00c1c (diff) | |
download | txr-bdd1a3fa274078dd37da6df64bb93b3b183fa7cb.tar.gz txr-bdd1a3fa274078dd37da6df64bb93b3b183fa7cb.tar.bz2 txr-bdd1a3fa274078dd37da6df64bb93b3b183fa7cb.zip |
* signal.c (set_sig_handler): Clear the deferred flag
for a signal that is being set to ignored or default.
* txr.1: Documented signals.
Diffstat (limited to 'signal.c')
-rw-r--r-- | signal.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -137,10 +137,14 @@ val set_sig_handler(val signo, val lambda) old_lambda = sig_lambda[sig]; if (lambda != old_lambda) { + unsigned long mask = 1UL << sig; + if (lambda == nil) { signal(sig, SIG_IGN); + sig_deferred &= ~mask; } else if (lambda == t) { signal(sig, SIG_DFL); + sig_deferred &= ~mask; } else { struct sigaction sa = { 0 }; |