@@ -32,13 +32,12 @@ func WithDirLock(dir string, fn func() error) error {
32
32
}
33
33
defer dirFile .Close ()
34
34
// see https://msdn.microsoft.com/en-us/library/windows/desktop/aa365203(v=vs.85).aspx
35
- // 1 lock immediately
36
- if err = windows .LockFileEx (windows .Handle (dirFile .Fd ()), 1 , 0 , 1 , 0 , & windows.Overlapped {}); err != nil {
35
+ if err = windows .LockFileEx (windows .Handle (dirFile .Fd ()), windows .LOCKFILE_EXCLUSIVE_LOCK , 0 , ^ uint32 (0 ), ^ uint32 (0 ), new (windows.Overlapped )); err != nil {
37
36
return fmt .Errorf ("failed to lock %q: %w" , dir , err )
38
37
}
39
38
40
39
defer func () {
41
- if err := windows .UnlockFileEx (windows .Handle (dirFile .Fd ()), 0 , 1 , 0 , & windows.Overlapped {} ); err != nil {
40
+ if err := windows .UnlockFileEx (windows .Handle (dirFile .Fd ()), 0 , ^ uint32 ( 0 ), ^ uint32 ( 0 ), new ( windows.Overlapped ) ); err != nil {
42
41
log .L .WithError (err ).Errorf ("failed to unlock %q" , dir )
43
42
}
44
43
}()
@@ -51,8 +50,7 @@ func Lock(dir string) (*os.File, error) {
51
50
return nil , err
52
51
}
53
52
// see https://msdn.microsoft.com/en-us/library/windows/desktop/aa365203(v=vs.85).aspx
54
- // 1 lock immediately
55
- if err = windows .LockFileEx (windows .Handle (dirFile .Fd ()), 1 , 0 , 1 , 0 , & windows.Overlapped {}); err != nil {
53
+ if err = windows .LockFileEx (windows .Handle (dirFile .Fd ()), windows .LOCKFILE_EXCLUSIVE_LOCK , 0 , ^ uint32 (0 ), ^ uint32 (0 ), new (windows.Overlapped )); err != nil {
56
54
return nil , fmt .Errorf ("failed to lock %q: %w" , dir , err )
57
55
}
58
56
return dirFile , nil
@@ -63,5 +61,5 @@ func Unlock(locked *os.File) error {
63
61
_ = locked .Close ()
64
62
}()
65
63
66
- return windows .UnlockFileEx (windows .Handle (locked .Fd ()), 0 , 1 , 0 , & windows.Overlapped {} )
64
+ return windows .UnlockFileEx (windows .Handle (locked .Fd ()), 0 , ^ uint32 ( 0 ), ^ uint32 ( 0 ), new ( windows.Overlapped ) )
67
65
}
0 commit comments