go.mod: github.com/alexflint/go-filemutex v1.1.0
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
5
vendor/github.com/alexflint/go-filemutex/filemutex.go
generated
vendored
Normal file
5
vendor/github.com/alexflint/go-filemutex/filemutex.go
generated
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
package filemutex
|
||||
|
||||
import "errors"
|
||||
|
||||
var AlreadyLocked = errors.New("lock already acquired")
|
16
vendor/github.com/alexflint/go-filemutex/filemutex_flock.go
generated
vendored
16
vendor/github.com/alexflint/go-filemutex/filemutex_flock.go
generated
vendored
@ -35,6 +35,18 @@ func (m *FileMutex) Lock() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *FileMutex) TryLock() error {
|
||||
if err := syscall.Flock(m.fd, syscall.LOCK_EX|syscall.LOCK_NB); err != nil {
|
||||
if errno, ok := err.(syscall.Errno); ok {
|
||||
if errno == syscall.EWOULDBLOCK {
|
||||
return AlreadyLocked
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *FileMutex) Unlock() error {
|
||||
if err := syscall.Flock(m.fd, syscall.LOCK_UN); err != nil {
|
||||
return err
|
||||
@ -56,9 +68,7 @@ func (m *FileMutex) RUnlock() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Close does an Unlock() combined with closing and unlinking the associated
|
||||
// lock file. You should create a New() FileMutex for every Lock() attempt if
|
||||
// using Close().
|
||||
// Close unlocks the lock and closes the underlying file descriptor.
|
||||
func (m *FileMutex) Close() error {
|
||||
if err := syscall.Flock(m.fd, syscall.LOCK_UN); err != nil {
|
||||
return err
|
||||
|
20
vendor/github.com/alexflint/go-filemutex/filemutex_windows.go
generated
vendored
20
vendor/github.com/alexflint/go-filemutex/filemutex_windows.go
generated
vendored
@ -16,7 +16,8 @@ var (
|
||||
)
|
||||
|
||||
const (
|
||||
lockfileExclusiveLock = 2
|
||||
lockfileFailImmediately = 1
|
||||
lockfileExclusiveLock = 2
|
||||
)
|
||||
|
||||
func lockFileEx(h syscall.Handle, flags, reserved, locklow, lockhigh uint32, ol *syscall.Overlapped) (err error) {
|
||||
@ -58,6 +59,19 @@ func New(filename string) (*FileMutex, error) {
|
||||
return &FileMutex{fd: fd}, nil
|
||||
}
|
||||
|
||||
func (m *FileMutex) TryLock() error {
|
||||
var ol syscall.Overlapped
|
||||
if err := lockFileEx(m.fd, lockfileFailImmediately|lockfileExclusiveLock, 0, 1, 0, &ol); err != nil {
|
||||
if errno, ok := err.(syscall.Errno); ok {
|
||||
if errno == syscall.Errno(0x21) {
|
||||
return AlreadyLocked
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *FileMutex) Lock() error {
|
||||
var ol syscall.Overlapped
|
||||
if err := lockFileEx(m.fd, lockfileExclusiveLock, 0, 1, 0, &ol); err != nil {
|
||||
@ -90,9 +104,7 @@ func (m *FileMutex) RUnlock() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Close does an Unlock() combined with closing and unlinking the associated
|
||||
// lock file. You should create a New() FileMutex for every Lock() attempt if
|
||||
// using Close().
|
||||
// Close unlocks the lock and closes the underlying file descriptor.
|
||||
func (m *FileMutex) Close() error {
|
||||
var ol syscall.Overlapped
|
||||
if err := unlockFileEx(m.fd, 0, 1, 0, &ol); err != nil {
|
||||
|
5
vendor/github.com/alexflint/go-filemutex/go.mod
generated
vendored
Normal file
5
vendor/github.com/alexflint/go-filemutex/go.mod
generated
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
module github.com/alexflint/go-filemutex
|
||||
|
||||
go 1.13
|
||||
|
||||
require github.com/stretchr/testify v1.4.0
|
11
vendor/github.com/alexflint/go-filemutex/go.sum
generated
vendored
Normal file
11
vendor/github.com/alexflint/go-filemutex/go.sum
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
Reference in New Issue
Block a user