Skip to content

Commit 732656a

Browse files
committed
Make windows filelocking exclusive
Signed-off-by: apostasie <[email protected]>
1 parent 1d9d22c commit 732656a

File tree

1 file changed

+4
-6
lines changed

1 file changed

+4
-6
lines changed

pkg/lockutil/lockutil_windows.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,12 @@ func WithDirLock(dir string, fn func() error) error {
3131
}
3232
defer dirFile.Close()
3333
// see https://msdn.microsoft.com/en-us/library/windows/desktop/aa365203(v=vs.85).aspx
34-
// 1 lock immediately
35-
if err = windows.LockFileEx(windows.Handle(dirFile.Fd()), 1, 0, 1, 0, &windows.Overlapped{}); err != nil {
34+
if err = windows.LockFileEx(windows.Handle(dirFile.Fd()), windows.LOCKFILE_EXCLUSIVE_LOCK, 0, ^uint32(0), ^uint32(0), new(windows.Overlapped)); err != nil {
3635
return fmt.Errorf("failed to lock %q: %w", dir, err)
3736
}
3837

3938
defer func() {
40-
if err := windows.UnlockFileEx(windows.Handle(dirFile.Fd()), 0, 1, 0, &windows.Overlapped{}); err != nil {
39+
if err := windows.UnlockFileEx(windows.Handle(dirFile.Fd()), 0, ^uint32(0), ^uint32(0), new(windows.Overlapped)); err != nil {
4140
log.L.WithError(err).Errorf("failed to unlock %q", dir)
4241
}
4342
}()
@@ -50,8 +49,7 @@ func Lock(dir string) (*os.File, error) {
5049
return nil, err
5150
}
5251
// see https://msdn.microsoft.com/en-us/library/windows/desktop/aa365203(v=vs.85).aspx
53-
// 1 lock immediately
54-
if err = windows.LockFileEx(windows.Handle(dirFile.Fd()), 1, 0, 1, 0, &windows.Overlapped{}); err != nil {
52+
if err = windows.LockFileEx(windows.Handle(dirFile.Fd()), windows.LOCKFILE_EXCLUSIVE_LOCK, 0, ^uint32(0), ^uint32(0), new(windows.Overlapped)); err != nil {
5553
return nil, fmt.Errorf("failed to lock %q: %w", dir, err)
5654
}
5755
return dirFile, nil
@@ -62,5 +60,5 @@ func Unlock(locked *os.File) error {
6260
_ = locked.Close()
6361
}()
6462

65-
return windows.UnlockFileEx(windows.Handle(locked.Fd()), 0, 1, 0, &windows.Overlapped{})
63+
return windows.UnlockFileEx(windows.Handle(locked.Fd()), 0, ^uint32(0), ^uint32(0), new(windows.Overlapped))
6664
}

0 commit comments

Comments
 (0)