1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
open Core
open Import
include Core.Signal
let handle_default `Do_not_use_with_async = assert false
let ignore `Do_not_use_with_async = assert false
module Scheduler = Raw_scheduler
let the_one_and_only = Scheduler.the_one_and_only
let handle ?stop ts ~f =
let scheduler = the_one_and_only () in
let signal_manager = scheduler.signal_manager in
let handler =
Raw_signal_manager.install_handler
signal_manager
ts
(unstage (Scheduler.preserve_execution_context f))
in
Option.iter stop ~f:(fun stop ->
upon stop (fun () -> Raw_signal_manager.remove_handler signal_manager handler))
;;
let terminating = [ alrm; hup; int; term; usr1; usr2 ]
let is_managed_by_async t =
let scheduler = the_one_and_only () in
let signal_manager = scheduler.signal_manager in
Raw_signal_manager.is_managing signal_manager t
;;