Module Await.MutexSource

Sourcetype packed =
  1. | P : 'k t -> packed
Sourceval create : Base.unit -> packed

Creates a mutex with a fresh existential key type.

Like create. Useful in module definitions, where GADTs cannot be unpacked.

Sourceval with_lock : 'k 'a ('b : value_or_null). Await_kernel.Await.t @ local -> 'k t -> f: ('k Await_capsule__.Import.Capsule.Access.t -> 'a @ portable contended) @ local once portable -> 'a @ portable contended

with_lock await t ~f acquires t, runs f within the associated capsule (providing it access to the capsule), then releases t. If t is locked, with_lock uses await to wait until it is unlocked.

Sourceval with_lock_or_cancel : 'k 'a ('b : value_or_null). Await_kernel.Await.t @ local -> Await_kernel.Cancellation.t @ local -> 'k t -> f: ('k Await_capsule__.Import.Capsule.Access.t -> 'a @ portable contended) @ local once portable -> 'a Await_kernel.Or_canceled.t @ portable contended

with_lock_or_cancel await c t ~f is Completed (with_lock await t ~f) if c is not canceled, otherwise it is Canceled.

Sourcemodule Poisoning : sig ... end

Functions that poison the mutex if the provided callback raises an exception.