lock_file_solaris.go 679 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // +build solaris
  2. package daemon
  3. import (
  4. "io"
  5. "syscall"
  6. )
  7. func lockFile(fd uintptr) error {
  8. lockInfo := syscall.Flock_t{
  9. Type: syscall.F_WRLCK,
  10. Whence: io.SeekStart,
  11. Start: 0,
  12. Len: 0,
  13. }
  14. if err := syscall.FcntlFlock(fd, syscall.F_SETLK, &lockInfo); err != nil {
  15. if err == syscall.EAGAIN {
  16. err = ErrWouldBlock
  17. }
  18. return err
  19. }
  20. return nil
  21. }
  22. func unlockFile(fd uintptr) error {
  23. lockInfo := syscall.Flock_t{
  24. Type: syscall.F_UNLCK,
  25. Whence: io.SeekStart,
  26. Start: 0,
  27. Len: 0,
  28. }
  29. if err := syscall.FcntlFlock(fd, syscall.F_GETLK, &lockInfo); err != nil {
  30. if err == syscall.EAGAIN {
  31. err = ErrWouldBlock
  32. }
  33. return err
  34. }
  35. return nil
  36. }