ocaml-opentelemetry/src/client/sync/notifier_sync.ml
2026-02-17 16:53:05 -05:00

23 lines
632 B
OCaml

module IO = Generic_io.Direct_style
type t = {
mutex: Mutex.t;
cond: Condition.t;
}
let create () : t = { mutex = Mutex.create (); cond = Condition.create () }
let[@inline] trigger self = Condition.broadcast self.cond
let delete = ignore
let wait self ~should_keep_waiting =
Mutex.lock self.mutex;
while should_keep_waiting () do
Condition.wait self.cond self.mutex
done;
Mutex.unlock self.mutex
(** Ensure we get signalled when the queue goes from empty to non-empty *)
let register_bounded_queue (self : t) (bq : _ Bounded_queue.Recv.t) : unit =
Bounded_queue.Recv.on_non_empty bq (fun () -> trigger self)