Something went wrong. Try again.
Monorepo for Tangled tangled.org
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930//go:build unix
package spindle
import ( "errors" "fmt" "os" "syscall")
// two spindles on one db would orphan workflows and double run pullsfunc lockInstance(dbPath string) (release func(), err error) { if dbPath == "" { return func() {}, nil } file, err := os.OpenFile(dbPath+".lock", os.O_CREATE|os.O_RDWR, 0o644) if err != nil { return nil, fmt.Errorf("opening the instance lock: %w", err) } if err := syscall.Flock(int(file.Fd()), syscall.LOCK_EX|syscall.LOCK_NB); err != nil { _ = file.Close() if errors.Is(err, syscall.EWOULDBLOCK) { return nil, fmt.Errorf("another spindle is running on %s", dbPath) } return nil, fmt.Errorf("locking %s.lock: %w", dbPath, err) } return func() { _ = file.Close() }, nil}