Documentation
¶
Overview ¶
Package flock provides a small cross-process advisory-lock primitive built on POSIX flock (Unix) / LockFileEx (Windows). It exists so that checkpoint and strategy can both serialize on shared resources without one taking the other as an import dependency.
Index ¶
- func Acquire(path string) (release func(), err error)
- func AcquireContext(ctx context.Context, path string) (release func(), err error)
- func AcquireContextIn(ctx context.Context, root *os.Root, name string) (release func(), err error)
- func AcquireIn(root *os.Root, name string) (release func(), err error)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Acquire ¶
Acquire takes an exclusive advisory lock on path, creating the file if needed. The returned release closes the file, which drops the flock. Callers must invoke release exactly once. The lock file persists between runs - flock state is held by the file descriptor, not by the inode on disk - so the lockfile contents are immaterial.
Acquire blocks indefinitely until the lock is available. Use AcquireContext with a deadline to bound the wait.
func AcquireContext ¶ added in v0.10.0
AcquireContext behaves like Acquire but honors ctx. When ctx carries a deadline it polls a non-blocking lock until the lock is acquired or the deadline/cancellation fires, returning a wrapped ctx.Err() on timeout. When ctx has no deadline it takes the same blocking kernel path as Acquire, so existing callers keep their exact behavior. This lets latency-critical hooks (turn-start) bound their wait and degrade gracefully instead of stalling behind a long-running lock holder (e.g. checkpoint condensation).
func AcquireContextIn ¶ added in v0.10.4
AcquireContextIn is AcquireContext for a lock file named inside root.
func AcquireIn ¶ added in v0.10.4
AcquireIn is Acquire for a lock file named inside root. It is the form the .git-resident locks use: their names carry agent-supplied session IDs, so resolving them through the git common dir's root keeps a name that escaped validation from naming a file outside the clone.
Types ¶
This section is empty.