Module Lock_file_blocking.Flock

This just uses flock. The main reason this module exists is that create won't let you release locks, so we need a new interface.

Another difference is that implementation is simpler because it omits some of the features, such as

1. Unlinking on exit. That seems unsafe. Consider the following scenario:

2. Writing pid or message in the file. The file is shared between multiple processes so this feature seems hard to think about, and it already lead to weird code. Let's just remove it. You can still find who holds the file open by inspecting output of lsof.

3. close_on_exec = false There is no objective reason to omit that, but I can't think of a reason to support it either.

type t
val lock_exn : lock_path:string -> [ `We_took_it of t | `Somebody_else_took_it ]

Raises an exception if taking the lock fails for any reason other than somebody else holding the lock.

val unlock_exn : t -> unit

Raises an exception if this lock was already unlocked earlier.