summaryrefslogtreecommitdiff
path: root/libguile/scmsigs.c
diff options
context:
space:
mode:
authorNeil Jerram <neil@ossau.uklinux.net>2009-03-05 20:03:33 +0000
committerNeil Jerram <neil@ossau.uklinux.net>2009-09-30 21:39:01 +0100
commit09d978f3f81d7ae43ba952de8dc568f54f5f80b6 (patch)
treeb70ff32638ed1e32cf9df95813d829b900e56838 /libguile/scmsigs.c
parent43b03fbbdc8d3eddc04daa1a14c5e2eae3ee5a1f (diff)
downloadguile-09d978f3f81d7ae43ba952de8dc568f54f5f80b6.tar.gz
Avoid throw from critical section, given invalid sigaction call
* libguile/scmsigs.c (scm_sigaction_for_thread): Exit critical section before raising out-of-range error. * test-suite/Makefile.am (SCM_TESTS): Add signals.test. * test-suite/tests/signals.test: New file.
Diffstat (limited to 'libguile/scmsigs.c')
-rw-r--r--libguile/scmsigs.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/libguile/scmsigs.c b/libguile/scmsigs.c
index d9b36c574..f38d15c75 100644
--- a/libguile/scmsigs.c
+++ b/libguile/scmsigs.c
@@ -340,7 +340,10 @@ SCM_DEFINE (scm_sigaction_for_thread, "sigaction", 1, 3, 0,
install_handler (csig, SCM_BOOL_F, SCM_BOOL_F);
}
else
- SCM_OUT_OF_RANGE (2, handler);
+ {
+ SCM_CRITICAL_SECTION_END;
+ SCM_OUT_OF_RANGE (2, handler);
+ }
}
else if (scm_is_false (handler))
{