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:
- both a and b create and open the file
- a locks, unlinks and unlocks it
- b locks and stays in critical section
- c finds that there is no file, creates a new one, locks it and enters critical section You end up with b and c in the critical section together!
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.
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.