aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/gofrs
diff options
context:
space:
mode:
authorTaras Madan <tarasmadan@google.com>2022-09-05 14:27:54 +0200
committerGitHub <noreply@github.com>2022-09-05 12:27:54 +0000
commitb2f2446b46bf02821d90ebedadae2bf7ae0e880e (patch)
tree923cf42842918d6bebca1d6bbdc08abed54d274d /vendor/github.com/gofrs
parente6654faff4bcca4be92e9a8596fd4b77f747c39e (diff)
go.mod, vendor: update (#3358)
* go.mod, vendor: remove unnecessary dependencies Commands: 1. go mod tidy 2. go mod vendor * go.mod, vendor: update cloud.google.com/go Commands: 1. go get -u cloud.google.com/go 2. go mod tidy 3. go mod vendor * go.mod, vendor: update cloud.google.com/* Commands: 1. go get -u cloud.google.com/storage cloud.google.com/logging 2. go mod tidy 3. go mod vendor * go.mod, .golangci.yml, vendor: update *lint* Commands: 1. go get -u golang.org/x/tools github.com/golangci/golangci-lint@v1.47.0 2. go mod tidy 3. go mod vendor 4. edit .golangci.yml to suppress new errors (resolved in the same PR later) * all: fix lint errors hash.go: copy() recommended by gosimple parse.go: ent is never nil verifier.go: signal.Notify() with unbuffered channel is bad. Have no idea why. * .golangci.yml: adjust godot rules check-all is deprecated, but still work if you're hesitating too - I'll remove this commit
Diffstat (limited to 'vendor/github.com/gofrs')
-rw-r--r--vendor/github.com/gofrs/flock/flock_aix.go26
1 files changed, 18 insertions, 8 deletions
diff --git a/vendor/github.com/gofrs/flock/flock_aix.go b/vendor/github.com/gofrs/flock/flock_aix.go
index 2a1607b2f..7277c1b6b 100644
--- a/vendor/github.com/gofrs/flock/flock_aix.go
+++ b/vendor/github.com/gofrs/flock/flock_aix.go
@@ -34,6 +34,13 @@ const (
writeLock lockType = unix.F_WRLCK
)
+type cmdType int
+
+const (
+ tryLock cmdType = unix.F_SETLK
+ waitLock cmdType = unix.F_SETLKW
+)
+
type inode = uint64
type inodeLock struct {
@@ -90,7 +97,7 @@ func (f *Flock) lock(locked *bool, flag lockType) error {
defer f.ensureFhState()
}
- if _, err := f.doLock(flag, true); err != nil {
+ if _, err := f.doLock(waitLock, flag, true); err != nil {
return err
}
@@ -98,7 +105,7 @@ func (f *Flock) lock(locked *bool, flag lockType) error {
return nil
}
-func (f *Flock) doLock(lt lockType, blocking bool) (bool, error) {
+func (f *Flock) doLock(cmd cmdType, lt lockType, blocking bool) (bool, error) {
// POSIX locks apply per inode and process, and the lock for an inode is
// released when *any* descriptor for that inode is closed. So we need to
// synchronize access to each inode internally, and must serialize lock and
@@ -143,10 +150,13 @@ func (f *Flock) doLock(lt lockType, blocking bool) (bool, error) {
wait <- f
}
- err = setlkw(f.fh.Fd(), lt)
+ err = setlkw(f.fh.Fd(), cmd, lt)
if err != nil {
f.doUnlock()
+ if cmd == tryLock && err == unix.EACCES {
+ return false, nil
+ }
return false, err
}
@@ -186,7 +196,7 @@ func (f *Flock) doUnlock() (err error) {
mu.Unlock()
if owner == f {
- err = setlkw(f.fh.Fd(), unix.F_UNLCK)
+ err = setlkw(f.fh.Fd(), waitLock, unix.F_UNLCK)
}
mu.Lock()
@@ -246,7 +256,7 @@ func (f *Flock) try(locked *bool, flag lockType) (bool, error) {
defer f.ensureFhState()
}
- haslock, err := f.doLock(flag, false)
+ haslock, err := f.doLock(tryLock, flag, false)
if err != nil {
return false, err
}
@@ -255,10 +265,10 @@ func (f *Flock) try(locked *bool, flag lockType) (bool, error) {
return haslock, nil
}
-// setlkw calls FcntlFlock with F_SETLKW for the entire file indicated by fd.
-func setlkw(fd uintptr, lt lockType) error {
+// setlkw calls FcntlFlock with cmd for the entire file indicated by fd.
+func setlkw(fd uintptr, cmd cmdType, lt lockType) error {
for {
- err := unix.FcntlFlock(fd, unix.F_SETLKW, &unix.Flock_t{
+ err := unix.FcntlFlock(fd, int(cmd), &unix.Flock_t{
Type: int16(lt),
Whence: io.SeekStart,
Start: 0,