diff options
author | 2024-09-30 12:46:23 +0200 | |
---|---|---|
committer | 2024-09-30 12:46:23 +0200 | |
commit | 188d28f054dbc9d8897a99d2213d8895922fc330 (patch) | |
tree | 2691665ad2e129ed7a07ea468024cc7db5005a54 /vendor/github.com/ncruces/go-sqlite3/vfs/os_ofd.go | |
parent | [bugfix] Carry-over "PinnedAt" when refreshing status (#3373) (diff) | |
download | gotosocial-188d28f054dbc9d8897a99d2213d8895922fc330.tar.xz |
[chore]: Bump github.com/ncruces/go-sqlite3 from 0.18.3 to 0.18.4 (#3375)
Bumps [github.com/ncruces/go-sqlite3](https://github.com/ncruces/go-sqlite3) from 0.18.3 to 0.18.4.
- [Release notes](https://github.com/ncruces/go-sqlite3/releases)
- [Commits](https://github.com/ncruces/go-sqlite3/compare/v0.18.3...v0.18.4)
---
updated-dependencies:
- dependency-name: github.com/ncruces/go-sqlite3
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Diffstat (limited to 'vendor/github.com/ncruces/go-sqlite3/vfs/os_ofd.go')
-rw-r--r-- | vendor/github.com/ncruces/go-sqlite3/vfs/os_ofd.go | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/vendor/github.com/ncruces/go-sqlite3/vfs/os_ofd.go b/vendor/github.com/ncruces/go-sqlite3/vfs/os_ofd.go new file mode 100644 index 000000000..15730fe62 --- /dev/null +++ b/vendor/github.com/ncruces/go-sqlite3/vfs/os_ofd.go @@ -0,0 +1,59 @@ +//go:build (linux || darwin) && !(sqlite3_flock || sqlite3_nosys) + +package vfs + +import ( + "os" + "time" + + "golang.org/x/sys/unix" +) + +func osGetSharedLock(file *os.File) _ErrorCode { + // Test the PENDING lock before acquiring a new SHARED lock. + if lock, _ := osTestLock(file, _PENDING_BYTE, 1); lock == unix.F_WRLCK { + return _BUSY + } + // Acquire the SHARED lock. + return osReadLock(file, _SHARED_FIRST, _SHARED_SIZE, 0) +} + +func osGetReservedLock(file *os.File) _ErrorCode { + // Acquire the RESERVED lock. + return osWriteLock(file, _RESERVED_BYTE, 1, 0) +} + +func osGetExclusiveLock(file *os.File, state *LockLevel) _ErrorCode { + if *state == LOCK_RESERVED { + // A PENDING lock is needed before acquiring an EXCLUSIVE lock. + if rc := osWriteLock(file, _PENDING_BYTE, 1, -1); rc != _OK { + return rc + } + *state = LOCK_PENDING + } + // Acquire the EXCLUSIVE lock. + return osWriteLock(file, _SHARED_FIRST, _SHARED_SIZE, time.Millisecond) +} + +func osDowngradeLock(file *os.File, state LockLevel) _ErrorCode { + if state >= LOCK_EXCLUSIVE { + // Downgrade to a SHARED lock. + if rc := osReadLock(file, _SHARED_FIRST, _SHARED_SIZE, 0); rc != _OK { + // notest // this should never happen + return _IOERR_RDLOCK + } + } + // Release the PENDING and RESERVED locks. + return osUnlock(file, _PENDING_BYTE, 2) +} + +func osReleaseLock(file *os.File, _ LockLevel) _ErrorCode { + // Release all locks. + return osUnlock(file, 0, 0) +} + +func osCheckReservedLock(file *os.File) (bool, _ErrorCode) { + // Test the RESERVED lock. + lock, rc := osTestLock(file, _RESERVED_BYTE, 1) + return lock == unix.F_WRLCK, rc +} |