Files
backrest/internal/resticinstaller/flock.go
2023-12-07 11:27:58 -08:00

30 lines
472 B
Go

//go:build linux || darwin
// +build linux darwin
package resticinstaller
import (
"os"
"path"
"syscall"
)
func withFlock(lock string, do func() error) error {
if err := os.MkdirAll(path.Dir(lock), 0700); err != nil {
return err
}
f, err := os.Create(lock)
if err != nil {
return err
}
defer f.Close()
if err := syscall.Flock(int(f.Fd()), syscall.LOCK_EX); err != nil {
return err
}
defer syscall.Flock(int(f.Fd()), syscall.LOCK_UN)
return do()
}