Add Release function for flock

parent 360d82d2
......@@ -19,6 +19,11 @@ limitations under the License.
package flock
// Acquire is not implemented on non-unix systems.
func Acquire(path string) error {
func Acquire(path string) (int, error) {
return -1, nil
}
// Release is not implemented on non-unix systems.
func Release(lock int) error {
return nil
}
......@@ -20,16 +20,17 @@ package flock
import "golang.org/x/sys/unix"
// Acquire acquires a lock on a file for the duration of the process. This method
// is reentrant.
func Acquire(path string) error {
fd, err := unix.Open(path, unix.O_CREAT|unix.O_RDWR|unix.O_CLOEXEC, 0600)
// Acquire creates an exclusive lock on a file for the duration of the process, or until Release(d).
// This method is reentrant.
func Acquire(path string) (int, error) {
lock, err := unix.Open(path, unix.O_CREAT|unix.O_RDWR|unix.O_CLOEXEC, 0600)
if err != nil {
return err
return -1, err
}
return lock, unix.Flock(lock, unix.LOCK_EX)
}
// We don't need to close the fd since we should hold
// it until the process exits.
return unix.Flock(fd, unix.LOCK_EX)
// Release removes an existing lock held by this process.
func Release(lock int) error {
return unix.Flock(lock, unix.LOCK_UN)
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment