@@ -31,13 +31,12 @@ func WithDirLock(dir string, fn func() error) error {
31
31
}
32
32
defer dirFile .Close ()
33
33
// 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 {
36
35
return fmt .Errorf ("failed to lock %q: %w" , dir , err )
37
36
}
38
37
39
38
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 {
41
40
log .L .WithError (err ).Errorf ("failed to unlock %q" , dir )
42
41
}
43
42
}()
@@ -50,8 +49,7 @@ func Lock(dir string) (*os.File, error) {
50
49
return nil , err
51
50
}
52
51
// 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 {
55
53
return nil , fmt .Errorf ("failed to lock %q: %w" , dir , err )
56
54
}
57
55
return dirFile , nil
@@ -62,5 +60,5 @@ func Unlock(locked *os.File) error {
62
60
_ = locked .Close ()
63
61
}()
64
62
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 ) )
66
64
}
0 commit comments