dotlk.go

 1package dotlk
 2
 3import (
 4	"errors"
 5	"io/fs"
 6	"os"
 7)
 8
 9// LockShm creates a directory on disk to prevent SQLite
10// from using this path for a shared memory file.
11func LockShm(name string) error {
12	err := os.Mkdir(name, 0777)
13	if errors.Is(err, fs.ErrExist) {
14		s, err := os.Lstat(name)
15		if err == nil && s.IsDir() {
16			return nil
17		}
18	}
19	return err
20}
21
22// Unlock removes the lock or shared memory file.
23func Unlock(name string) error {
24	err := os.Remove(name)
25	if errors.Is(err, fs.ErrNotExist) {
26		return nil
27	}
28	return err
29}