summaryrefslogtreecommitdiff
path: root/vendor/github.com/ncruces/go-sqlite3/vfs/os_darwin.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/ncruces/go-sqlite3/vfs/os_darwin.go')
-rw-r--r--vendor/github.com/ncruces/go-sqlite3/vfs/os_darwin.go22
1 files changed, 16 insertions, 6 deletions
diff --git a/vendor/github.com/ncruces/go-sqlite3/vfs/os_darwin.go b/vendor/github.com/ncruces/go-sqlite3/vfs/os_darwin.go
index 07de7c3d8..ee08e9a7b 100644
--- a/vendor/github.com/ncruces/go-sqlite3/vfs/os_darwin.go
+++ b/vendor/github.com/ncruces/go-sqlite3/vfs/os_darwin.go
@@ -27,7 +27,12 @@ func osSync(file *os.File, fullsync, _ /*dataonly*/ bool) error {
if fullsync {
return file.Sync()
}
- return unix.Fsync(int(file.Fd()))
+ for {
+ err := unix.Fsync(int(file.Fd()))
+ if err != unix.EINTR {
+ return err
+ }
+ }
}
func osAllocate(file *os.File, size int64) error {
@@ -85,13 +90,18 @@ func osLock(file *os.File, typ int16, start, len int64, timeout time.Duration, d
}
func osUnlock(file *os.File, start, len int64) _ErrorCode {
- err := unix.FcntlFlock(file.Fd(), _F_OFD_SETLK, &unix.Flock_t{
+ lock := unix.Flock_t{
Type: unix.F_UNLCK,
Start: start,
Len: len,
- })
- if err != nil {
- return _IOERR_UNLOCK
}
- return _OK
+ for {
+ err := unix.FcntlFlock(file.Fd(), _F_OFD_SETLK, &lock)
+ if err == nil {
+ return _OK
+ }
+ if err != unix.EINTR {
+ return _IOERR_UNLOCK
+ }
+ }
}