module Signal : Core.Std.Signal
module Handlers : sig .. end
type t = {
bag : (Signal.t -> unit) Core.Std.sexp_opaque Core.Std.Bag.t;
}
val sexp_of_t : t -> Sexplib.Sexp.t
val create : unit -> t
val add : t ->
(Signal.t -> unit) Core.Std.sexp_opaque ->
(Signal.t -> unit) Core.Std.sexp_opaque Core.Std.Bag.Elt.t
val remove : t -> (Signal.t -> unit) Core.Std.sexp_opaque Core.Std.Bag.Elt.t -> unit
val deliver : t -> Signal.t -> unit
type t = {
handlers_by_signal : Handlers.t Signal.Table.t;
delivered : (Signal.t * Handlers.t) Core.Std.Thread_safe_queue.t Core.Std.sexp_opaque;
thread_safe_notify_signal_delivered : unit -> unit;
}
val sexp_of_t : t -> Sexplib.Sexp.t
val invariant : 'a -> unit
val create : thread_safe_notify_signal_delivered:(unit -> unit) -> t
val is_managing : t -> Signal.Table.key Core.Std.Hashtbl.key -> bool
module Handler : sig .. end
type t = 
|T of (Handlers.t * (Signal.t -> unit) Core.Std.Bag.Elt.t) list
type handler = Handler.t
val get_handlers : t -> Signal.Table.key Core.Std.Hashtbl.key -> Handlers.t
val manage : t -> Signal.Table.key Core.Std.Hashtbl.key -> unit
val install_handler : t ->
Signal.Table.key Core.Std.Hashtbl.key Core.Std.List.t ->
(Signal.t -> unit) Core.Std.sexp_opaque -> Handler.t
val remove_handler : 'a -> Handler.t -> unit
val handle_delivered : t -> unit