OODTgts map[string]struct{}
FdOODTgts *os.File
FdOODTgtsLock *os.File
+
+ ErrMissingTarget = errors.New("invalid format of .rec: missing Target")
)
type TgtError struct {
for _, m := range depInfo.ifchanges {
dep := m["Target"]
if dep == "" {
- return ood, TgtError{tgtOrig, errors.New("invalid format of .rec: missing Target")}
+ return ood, TgtError{tgtOrig, ErrMissingTarget}
}
theirInode, err := inodeFromRec(m)
if err != nil {
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 {
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
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)
}
}