diff options
author | 2024-12-16 11:37:53 +0000 | |
---|---|---|
committer | 2024-12-16 11:37:53 +0000 | |
commit | 9697df0955095cb9be7b5fa0c4408ae4523d8b08 (patch) | |
tree | 737d826b4ea8bc22c0645cbbea7ab143428e0bda /vendor/github.com/ncruces/go-sqlite3/vfs/os_linux.go | |
parent | bump gruf/go-ffmpreg to v0.6.3 (#3624) (diff) | |
download | gotosocial-9697df0955095cb9be7b5fa0c4408ae4523d8b08.tar.xz |
bump ncruces/go-sqlite3 to v0.21.1 (#3625)
Diffstat (limited to 'vendor/github.com/ncruces/go-sqlite3/vfs/os_linux.go')
-rw-r--r-- | vendor/github.com/ncruces/go-sqlite3/vfs/os_linux.go | 48 |
1 files changed, 17 insertions, 31 deletions
diff --git a/vendor/github.com/ncruces/go-sqlite3/vfs/os_linux.go b/vendor/github.com/ncruces/go-sqlite3/vfs/os_linux.go index f5841fc20..6199c7b00 100644 --- a/vendor/github.com/ncruces/go-sqlite3/vfs/os_linux.go +++ b/vendor/github.com/ncruces/go-sqlite3/vfs/os_linux.go @@ -3,7 +3,6 @@ package vfs import ( - "math/rand" "os" "time" @@ -22,16 +21,12 @@ func osAllocate(file *os.File, size int64) error { return unix.Fallocate(int(file.Fd()), 0, 0, size) } -func osUnlock(file *os.File, start, len int64) _ErrorCode { - err := unix.FcntlFlock(file.Fd(), unix.F_OFD_SETLK, &unix.Flock_t{ - Type: unix.F_UNLCK, - Start: start, - Len: len, - }) - if err != nil { - return _IOERR_UNLOCK - } - return _OK +func osReadLock(file *os.File, start, len int64, timeout time.Duration) _ErrorCode { + return osLock(file, unix.F_RDLCK, start, len, timeout, _IOERR_RDLOCK) +} + +func osWriteLock(file *os.File, start, len int64, timeout time.Duration) _ErrorCode { + return osLock(file, unix.F_WRLCK, start, len, timeout, _IOERR_LOCK) } func osLock(file *os.File, typ int16, start, len int64, timeout time.Duration, def _ErrorCode) _ErrorCode { @@ -42,31 +37,22 @@ func osLock(file *os.File, typ int16, start, len int64, timeout time.Duration, d } var err error switch { - case timeout == 0: - err = unix.FcntlFlock(file.Fd(), unix.F_OFD_SETLK, &lock) case timeout < 0: err = unix.FcntlFlock(file.Fd(), unix.F_OFD_SETLKW, &lock) default: - before := time.Now() - for { - err = unix.FcntlFlock(file.Fd(), unix.F_OFD_SETLK, &lock) - if errno, _ := err.(unix.Errno); errno != unix.EAGAIN { - break - } - if time.Since(before) > timeout { - break - } - const sleepIncrement = 1024*1024 - 1 // power of two, ~1ms - time.Sleep(time.Duration(rand.Int63() & sleepIncrement)) - } + err = unix.FcntlFlock(file.Fd(), unix.F_OFD_SETLK, &lock) } return osLockErrorCode(err, def) } -func osReadLock(file *os.File, start, len int64, timeout time.Duration) _ErrorCode { - return osLock(file, unix.F_RDLCK, start, len, timeout, _IOERR_RDLOCK) -} - -func osWriteLock(file *os.File, start, len int64, timeout time.Duration) _ErrorCode { - return osLock(file, unix.F_WRLCK, start, len, timeout, _IOERR_LOCK) +func osUnlock(file *os.File, start, len int64) _ErrorCode { + err := unix.FcntlFlock(file.Fd(), unix.F_OFD_SETLK, &unix.Flock_t{ + Type: unix.F_UNLCK, + Start: start, + Len: len, + }) + if err != nil { + return _IOERR_UNLOCK + } + return _OK } |