Skip to content
This repository has been archived by the owner on Apr 10, 2023. It is now read-only.

juju/fslock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fslock GoDoc

fslock provides a cross-process mutex based on file locks that works on windows and *nix platforms.

fslock

image: public domain (don't ask)

fslock relies on LockFileEx on Windows and flock on *nix systems. The timeout feature uses overlapped IO on Windows, but on *nix platforms, timing out requires the use of a goroutine that will run until the lock is acquired, regardless of timeout. If you need to avoid this use of goroutines, poll TryLock in a loop.

Variables

var ErrLocked error = trylockError("fslock is already locked")

ErrLocked indicates TryLock failed because the lock was already locked.

var ErrTimeout error = timeoutError("lock timeout exceeded")

ErrTimeout indicates that the lock attempt timed out.

type Lock

type Lock struct {
    // contains filtered or unexported fields
}

Lock implements cross-process locks using syscalls.

func New

func New(filename string) *Lock

New returns a new lock around the given file.

func (*Lock) Lock

func (l *Lock) Lock() error

Lock locks the lock. This call will block until the lock is available.

func (*Lock) LockWithTimeout

func (l *Lock) LockWithTimeout(timeout time.Duration) error

LockWithTimeout tries to lock the lock until the timeout expires. If the timeout expires, this method will return ErrTimeout.

func (*Lock) TryLock

func (l *Lock) TryLock() error

TryLock attempts to lock the lock. This method will return ErrLocked immediately if the lock cannot be acquired.

func (*Lock) Unlock

func (l *Lock) Unlock() error

Unlock unlocks the lock.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages