A signal manager keeps track of a set of signals to be managed and the signal handlers for them. When a signal manager is managing a signal, it installs its own OCaml handler for that signal that records delivery of the signal. It then later, upon request, will deliver the signal to all its handlers.
Once a signal manager starts managing a signal, it never stops.
create
creates and returns a signal manager t
. Whenever a signal that t
is
managing is delivered, it will call thread_safe_notify_signal_delivered
from within
the OCaml signal handler. Therefore thread_safe_notify_signal_delivered
must be
thread safe.
manage t signal
causes t
to manage signal
, thus overriding
default_sys_behavior
for that signal, and any other OCaml handler for that
signal.
install_handler t signals f
causes t
to manage the handling of signals
, and
registers f
to run on every signal in signals
that is delivered. It is an
error if f
ever raises when it is called.
handle_delivered t
runs all signal handlers on the signals that have been
delivered but not yet handled.