Skip to content

Commit

Permalink
chore: cleaning and readability
Browse files Browse the repository at this point in the history
  • Loading branch information
ldez committed Jun 30, 2024
1 parent b659e1e commit 016605a
Show file tree
Hide file tree
Showing 8 changed files with 91 additions and 72 deletions.
2 changes: 2 additions & 0 deletions flock.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ func (f *Flock) Path() string {
func (f *Flock) Locked() bool {
f.m.RLock()
defer f.m.RUnlock()

return f.l
}

Expand All @@ -118,6 +119,7 @@ func (f *Flock) Locked() bool {
func (f *Flock) RLocked() bool {
f.m.RLock()
defer f.m.RUnlock()

return f.r
}

Expand Down
24 changes: 13 additions & 11 deletions flock_example_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@ import (
"context"
"fmt"
"os"
"path/filepath"
"time"

"github.com/gofrs/flock"
)

func ExampleFlock_Locked() {
f := flock.New(os.TempDir() + "/go-lock.lock")
f := flock.New(filepath.Join(os.TempDir(), "go-lock.lock"))

_, err := f.TryLock()
if err != nil {
Expand All @@ -32,53 +33,54 @@ func ExampleFlock_Locked() {
}

fmt.Printf("locked: %v\n", f.Locked())

// Output: locked: true
// locked: false
}

func ExampleFlock_TryLock() {
// should probably put these in /var/lock
fileLock := flock.New(os.TempDir() + "/go-lock.lock")
f := flock.New(filepath.Join(os.TempDir(), "go-lock.lock"))

locked, err := fileLock.TryLock()
locked, err := f.TryLock()
if err != nil {
// handle locking error
panic(err)
}

if locked {
fmt.Printf("path: %s; locked: %v\n", fileLock.Path(), fileLock.Locked())
fmt.Printf("path: %s; locked: %v\n", f.Path(), f.Locked())

if err := fileLock.Unlock(); err != nil {
if err := f.Unlock(); err != nil {
// handle unlock error
panic(err)
}
}

fmt.Printf("path: %s; locked: %v\n", fileLock.Path(), fileLock.Locked())
fmt.Printf("path: %s; locked: %v\n", f.Path(), f.Locked())
}

func ExampleFlock_TryLockContext() {
// should probably put these in /var/lock
fileLock := flock.New(os.TempDir() + "/go-lock.lock")
f := flock.New(filepath.Join(os.TempDir(), "go-lock.lock"))

lockCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()

locked, err := fileLock.TryLockContext(lockCtx, 678*time.Millisecond)
locked, err := f.TryLockContext(lockCtx, 678*time.Millisecond)
if err != nil {
// handle locking error
panic(err)
}

if locked {
fmt.Printf("path: %s; locked: %v\n", fileLock.Path(), fileLock.Locked())
fmt.Printf("path: %s; locked: %v\n", f.Path(), f.Locked())

if err := fileLock.Unlock(); err != nil {
if err := f.Unlock(); err != nil {
// handle unlock error
panic(err)
}
}

fmt.Printf("path: %s; locked: %v\n", fileLock.Path(), fileLock.Locked())
fmt.Printf("path: %s; locked: %v\n", f.Path(), f.Locked())
}
4 changes: 2 additions & 2 deletions flock_internal_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ func Test(t *testing.T) {
tmpFile, err := os.CreateTemp(t.TempDir(), "go-flock-")
require.NoError(t, err)

tmpFile.Close()
os.Remove(tmpFile.Name())
_ = tmpFile.Close()
_ = os.Remove(tmpFile.Name())

lock := New(tmpFile.Name())

Expand Down
47 changes: 17 additions & 30 deletions flock_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,55 +32,48 @@ func (s *TestSuite) SetupTest() {
s.Require().NotNil(tmpFile)

s.path = tmpFile.Name()
_ = tmpFile.Close()

defer os.Remove(s.path)
tmpFile.Close()

s.flock = flock.New(s.path)
}

func (s *TestSuite) TearDownTest() {
_ = s.flock.Unlock()
os.Remove(s.path)
_ = os.Remove(s.path)
}

func (s *TestSuite) TestNew() {
f := flock.New(s.path)
s.Require().NotNil(f)

s.Equal(s.path, f.Path())
s.Equal(f.Path(), s.path)
s.False(f.Locked())
s.False(f.RLocked())
}

func (s *TestSuite) TestFlock_Path() {
path := s.flock.Path()
s.Equal(s.path, path)
s.Equal(s.path, s.flock.Path())
}

func (s *TestSuite) TestFlock_Locked() {
locked := s.flock.Locked()
s.False(locked)
s.False(s.flock.Locked())
}

func (s *TestSuite) TestFlock_RLocked() {
locked := s.flock.RLocked()
s.False(locked)
s.False(s.flock.RLocked())
}

func (s *TestSuite) TestFlock_String() {
str := s.flock.String()
s.Equal(s.path, str)
s.Equal(s.path, s.flock.String())
}

func (s *TestSuite) TestFlock_TryLock() {
s.False(s.flock.Locked())
s.False(s.flock.RLocked())

var locked bool
var err error

locked, err = s.flock.TryLock()
locked, err := s.flock.TryLock()
s.Require().NoError(err)
s.True(locked)
s.True(s.flock.Locked())
Expand All @@ -101,10 +94,7 @@ func (s *TestSuite) TestFlock_TryRLock() {
s.False(s.flock.Locked())
s.False(s.flock.RLocked())

var locked bool
var err error

locked, err = s.flock.TryRLock()
locked, err := s.flock.TryRLock()
s.Require().NoError(err)
s.True(locked)
s.False(s.flock.Locked())
Expand Down Expand Up @@ -142,8 +132,9 @@ func (s *TestSuite) TestFlock_TryRLock() {
}

func (s *TestSuite) TestFlock_TryLockContext() {
// happy path
ctx, cancel := context.WithCancel(context.Background())

// happy path
locked, err := s.flock.TryLockContext(ctx, time.Second)
s.Require().NoError(err)
s.True(locked)
Expand All @@ -165,14 +156,16 @@ func (s *TestSuite) TestFlock_TryLockContext() {
}

func (s *TestSuite) TestFlock_TryRLockContext() {
// happy path
ctx, cancel := context.WithCancel(context.Background())

// happy path
locked, err := s.flock.TryRLockContext(ctx, time.Second)
s.Require().NoError(err)
s.True(locked)

// context already canceled
cancel()

locked, err = flock.New(s.path).TryRLockContext(ctx, time.Second)
s.Require().ErrorIs(err, context.Canceled)
s.False(locked)
Expand All @@ -190,9 +183,7 @@ func (s *TestSuite) TestFlock_TryRLockContext() {
}

func (s *TestSuite) TestFlock_Unlock() {
var err error

err = s.flock.Unlock()
err := s.flock.Unlock()
s.Require().NoError(err)

// get a lock for us to unlock
Expand All @@ -215,9 +206,7 @@ func (s *TestSuite) TestFlock_Lock() {
s.False(s.flock.Locked())
s.False(s.flock.RLocked())

var err error

err = s.flock.Lock()
err := s.flock.Lock()
s.Require().NoError(err)
s.True(s.flock.Locked())
s.False(s.flock.RLocked())
Expand Down Expand Up @@ -259,9 +248,7 @@ func (s *TestSuite) TestFlock_RLock() {
s.False(s.flock.Locked())
s.False(s.flock.RLocked())

var err error

err = s.flock.RLock()
err := s.flock.RLock()
s.Require().NoError(err)
s.False(s.flock.Locked())
s.True(s.flock.RLocked())
Expand Down
38 changes: 22 additions & 16 deletions flock_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ func (f *Flock) lock(locked *bool, flag int) error {
if err := f.setFh(); err != nil {
return err
}

defer f.ensureFhState()
}

Expand Down Expand Up @@ -146,6 +147,7 @@ func (f *Flock) try(locked *bool, flag int) (bool, error) {
if err := f.setFh(); err != nil {
return false, err
}

defer f.ensureFhState()
}

Expand Down Expand Up @@ -182,22 +184,26 @@ func (f *Flock) reopenFDOnError(err error) (bool, error) {
if !errors.Is(err, syscall.EIO) && !errors.Is(err, syscall.EBADF) {
return false, nil
}
if st, err := f.fh.Stat(); err == nil {
// if the file is able to be read and written
if st.Mode()&f.perm == f.perm {
_ = f.fh.Close()
f.fh = nil

// reopen in read-write mode and set the file handle
fh, err := os.OpenFile(f.path, f.flag, f.perm)
if err != nil {
return false, err
}
f.fh = fh

return true, nil
}

st, err := f.fh.Stat()
if err != nil {
return false, nil
}

if st.Mode()&f.perm != f.perm {
return false, nil
}

return false, nil
_ = f.fh.Close()
f.fh = nil

// reopen in read-write mode and set the file handle
fh, err := os.OpenFile(f.path, f.flag, f.perm)
if err != nil {
return false, err
}

f.fh = fh

return true, nil
}
Loading

0 comments on commit 016605a

Please sign in to comment.