filelocker_other.go 793 B

123456789101112131415161718192021222324252627282930313233343536
  1. // +build !windows
  2. package internet
  3. import (
  4. "os"
  5. "golang.org/x/sys/unix"
  6. )
  7. // Acquire lock
  8. func (fl *FileLocker) Acquire() error {
  9. f, err := os.Create(fl.path)
  10. if err != nil {
  11. return err
  12. }
  13. if err := unix.Flock(int(f.Fd()), unix.LOCK_EX); err != nil {
  14. f.Close()
  15. return newError("failed to lock file: ", fl.path).Base(err)
  16. }
  17. fl.file = f
  18. return nil
  19. }
  20. // Release lock
  21. func (fl *FileLocker) Release() {
  22. if err := unix.Flock(int(fl.file.Fd()), unix.LOCK_UN); err != nil {
  23. newError("failed to unlock file: ", fl.path).Base(err).WriteToLog()
  24. }
  25. if err := fl.file.Close(); err != nil {
  26. newError("failed to close file: ", fl.path).Base(err).WriteToLog()
  27. }
  28. if err := os.Remove(fl.path); err != nil {
  29. newError("failed to remove file: ", fl.path).Base(err).WriteToLog()
  30. }
  31. }