]> Cypherpunks.ru repositories - goredo.git/blobdiff - ood.go
Replace flock() with fcntl() locks
[goredo.git] / ood.go
diff --git a/ood.go b/ood.go
index e216595fcfcd069c98505c9c5a0ce008d1547bb9..39c265cf787ef253bfdb6193d0bd3e9dcd094557 100644 (file)
--- a/ood.go
+++ b/ood.go
@@ -250,7 +250,11 @@ func isOODWithTrace(
                return ood, err
        }
 RecordOODTgt:
-       if err = unix.Flock(int(FdOODTgtsLock.Fd()), unix.LOCK_EX); err != nil {
+       flock := unix.Flock_t{
+               Type:   unix.F_WRLCK,
+               Whence: io.SeekStart,
+       }
+       if err = unix.FcntlFlock(FdOODTgtsLock.Fd(), unix.F_SETLKW, &flock); err != nil {
                log.Fatalln(err)
        }
        if _, err = FdOODTgts.Seek(0, io.SeekEnd); err != nil {
@@ -259,7 +263,8 @@ RecordOODTgt:
        if _, err := FdOODTgts.WriteString(p + "\x00"); err != nil {
                log.Fatalln(err)
        }
-       if err = unix.Flock(int(FdOODTgtsLock.Fd()), unix.LOCK_UN); err != nil {
+       flock.Type = unix.F_UNLCK
+       if err = unix.FcntlFlock(FdOODTgtsLock.Fd(), unix.F_SETLK, &flock); err != nil {
                log.Fatalln(err)
        }
        return true, nil
@@ -267,13 +272,18 @@ RecordOODTgt:
 
 func oodTgtsClear() {
        var err error
-       if err = unix.Flock(int(FdOODTgtsLock.Fd()), unix.LOCK_EX); err != nil {
+       flock := unix.Flock_t{
+               Type:   unix.F_WRLCK,
+               Whence: io.SeekStart,
+       }
+       if err = unix.FcntlFlock(FdOODTgtsLock.Fd(), unix.F_SETLKW, &flock); err != nil {
                log.Fatalln(err)
        }
        if err = FdOODTgts.Truncate(0); err != nil {
                log.Fatalln(err)
        }
-       if err = unix.Flock(int(FdOODTgtsLock.Fd()), unix.LOCK_UN); err != nil {
+       flock.Type = unix.F_UNLCK
+       if err = unix.FcntlFlock(FdOODTgtsLock.Fd(), unix.F_SETLK, &flock); err != nil {
                log.Fatalln(err)
        }
 }