summaryrefslogtreecommitdiffstats
path: root/byterun/signals.c
diff options
context:
space:
mode:
Diffstat (limited to 'byterun/signals.c')
-rw-r--r--byterun/signals.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/byterun/signals.c b/byterun/signals.c
index a4851e7c8..a02f6b859 100644
--- a/byterun/signals.c
+++ b/byterun/signals.c
@@ -94,6 +94,8 @@ CAMLexport int (*caml_try_leave_blocking_section_hook)(void) =
CAMLexport int caml_rev_convert_signal_number(int signo);
+/* Execute a signal handler immediately */
+
void caml_execute_signal(int signal_number, int in_signal_handler)
{
value res;
@@ -121,6 +123,15 @@ void caml_execute_signal(int signal_number, int in_signal_handler)
if (Is_exception_result(res)) caml_raise(Extract_exception(res));
}
+/* Record the delivery of a signal, and arrange so that caml_process_event
+ is called as soon as possible. */
+
+void caml_record_signal(int signal_number)
+{
+ caml_pending_signals[signal_number] = 1;
+ caml_something_to_do = 1;
+}
+
static void handle_signal(int signal_number)
{
#if !defined(POSIX_SIGNALS) && !defined(BSD_SIGNALS)
@@ -131,9 +142,8 @@ static void handle_signal(int signal_number)
caml_execute_signal(signal_number, 1);
caml_enter_blocking_section_hook();
}else{
- caml_pending_signals[signal_number] = 1;
- caml_something_to_do = 1;
- }
+ caml_record_signal(signal_number);
+ }
}
void caml_urge_major_slice (void)