waveterm/pkg/wavebase/wavebase-posix.go

31 lines
608 B
Go
Raw Normal View History

2024-10-04 21:20:52 +02:00
// Copyright 2024, Command Line Inc.
// SPDX-License-Identifier: Apache-2.0
//go:build !windows
package wavebase
import (
"log"
"os"
"path/filepath"
"golang.org/x/sys/unix"
)
func AcquireWaveLock() (FDLock, error) {
dataHomeDir := GetWaveDataDir()
lockFileName := filepath.Join(dataHomeDir, WaveLockFile)
2024-10-04 21:20:52 +02:00
log.Printf("[base] acquiring lock on %s\n", lockFileName)
fd, err := os.OpenFile(lockFileName, os.O_RDWR|os.O_CREATE, 0600)
if err != nil {
return nil, err
}
err = unix.Flock(int(fd.Fd()), unix.LOCK_EX|unix.LOCK_NB)
if err != nil {
fd.Close()
return nil, err
}
return fd, nil
}