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}