~ knotless Search/
↑↓ move↵ open⇧↵ all results
0
0
main
23 lines · 385 B Raw History
//go:build unix

package assets

import (
	"os"
	"syscall"
)

func lockPath(p string) (func(), error) {
	f, err := os.OpenFile(p, os.O_RDWR|os.O_CREATE, 0o600)
	if err != nil {
		return nil, err
	}
	if err := syscall.Flock(int(f.Fd()), syscall.LOCK_EX); err != nil {
		f.Close()
		return nil, err
	}
	return func() {
		syscall.Flock(int(f.Fd()), syscall.LOCK_UN)
		f.Close()
	}, nil
}