mirror of
https://github.com/XTLS/Xray-core.git
synced 2025-06-14 04:19:36 +03:00
v1.0.0
This commit is contained in:
36
transport/internet/filelocker_other.go
Normal file
36
transport/internet/filelocker_other.go
Normal file
@ -0,0 +1,36 @@
|
||||
// +build !windows
|
||||
|
||||
package internet
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
// Acquire lock
|
||||
func (fl *FileLocker) Acquire() error {
|
||||
f, err := os.Create(fl.path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if err := unix.Flock(int(f.Fd()), unix.LOCK_EX); err != nil {
|
||||
f.Close()
|
||||
return newError("failed to lock file: ", fl.path).Base(err)
|
||||
}
|
||||
fl.file = f
|
||||
return nil
|
||||
}
|
||||
|
||||
// Release lock
|
||||
func (fl *FileLocker) Release() {
|
||||
if err := unix.Flock(int(fl.file.Fd()), unix.LOCK_UN); err != nil {
|
||||
newError("failed to unlock file: ", fl.path).Base(err).WriteToLog()
|
||||
}
|
||||
if err := fl.file.Close(); err != nil {
|
||||
newError("failed to close file: ", fl.path).Base(err).WriteToLog()
|
||||
}
|
||||
if err := os.Remove(fl.path); err != nil {
|
||||
newError("failed to remove file: ", fl.path).Base(err).WriteToLog()
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user