diff options
author | Andy Wingo <wingo@pobox.com> | 2016-11-01 21:40:34 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2016-11-01 21:40:34 +0100 |
commit | 465466ce4dcb0ca10e9efb3d0746fcee11a96b3f (patch) | |
tree | 208fc1caa0504a98b0b59c442b32546c5a5adb77 /libguile/scmsigs.c | |
parent | 0a663877acb5ab5b79d7fafa5075d1f535527942 (diff) | |
download | guile-465466ce4dcb0ca10e9efb3d0746fcee11a96b3f.tar.gz |
sigaction critical section refactor.
* libguile/scmsigs.c (scm_sigaction_for_thread): Use critical section
dynwinds instead of SCM_CRITICAL_SECTION_START.
Diffstat (limited to 'libguile/scmsigs.c')
-rw-r--r-- | libguile/scmsigs.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/libguile/scmsigs.c b/libguile/scmsigs.c index b030b0413..d52fe8cba 100644 --- a/libguile/scmsigs.c +++ b/libguile/scmsigs.c @@ -334,7 +334,9 @@ SCM_DEFINE (scm_sigaction_for_thread, "sigaction", 1, 3, 0, scm_i_ensure_signal_delivery_thread (); - SCM_CRITICAL_SECTION_START; + scm_dynwind_begin (0); + scm_dynwind_critical_section (SCM_BOOL_F); + old_handler = SCM_SIMPLE_VECTOR_REF (*signal_handlers, csig); if (SCM_UNBNDP (handler)) query_only = 1; @@ -353,7 +355,6 @@ SCM_DEFINE (scm_sigaction_for_thread, "sigaction", 1, 3, 0, } else { - SCM_CRITICAL_SECTION_END; SCM_OUT_OF_RANGE (2, handler); } } @@ -440,7 +441,9 @@ SCM_DEFINE (scm_sigaction_for_thread, "sigaction", 1, 3, 0, } if (old_action.sa_handler == SIG_DFL || old_action.sa_handler == SIG_IGN) old_handler = scm_from_long ((long) old_action.sa_handler); - SCM_CRITICAL_SECTION_END; + + scm_dynwind_end (); + return scm_cons (old_handler, scm_from_int (old_action.sa_flags)); #else if (query_only) @@ -459,7 +462,9 @@ SCM_DEFINE (scm_sigaction_for_thread, "sigaction", 1, 3, 0, } if (old_chandler == SIG_DFL || old_chandler == SIG_IGN) old_handler = scm_from_long ((long) old_chandler); - SCM_CRITICAL_SECTION_END; + + scm_dynwind_end (); + return scm_cons (old_handler, scm_from_int (0)); #endif } |