//go:build linux || darwin || freebsd || openbsd || netbsd || dragonfly package client import ( "errors" "os" "syscall" ) func lockPath(path string) (func(), error) { f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0o600) if err != nil { return nil, err } if err := syscall.Flock(int(f.Fd()), syscall.LOCK_EX|syscall.LOCK_NB); err != nil { f.Close() if errors.Is(err, syscall.EWOULDBLOCK) { return nil, ErrMirrorBusy } return nil, err } return func() { f.Close() }, nil }