run.go | 9 ++++++--- diff --git a/run.go b/run.go index 24a1c675cbf525fbc62d5991e18579e1b2333c36bf347537753d4ce13648891f..e47b2b9027550b9c457f621751208de3c6bd492006c31756cc4c27c7797fc9f0 100644 --- a/run.go +++ b/run.go @@ -217,7 +217,7 @@ lockRelease := func() { tracef(CLock, "LOCK_UN: %s", fdLock.Name()) flock.Type = unix.F_UNLCK if err := unix.FcntlFlock(fdLock.Fd(), unix.F_SETLK, &flock); err != nil { - log.Fatalln(err) + log.Fatalln(err, fdLock.Name()) } fdLock.Close() } @@ -231,7 +231,7 @@ return TgtError{tgtOrig, err} } Jobs.Add(1) if err = unix.FcntlFlock(fdLock.Fd(), unix.F_GETLK, &flock); err != nil { - log.Fatalln(err) + log.Fatalln(err, fdLock.Name()) } tracef(CDebug, "waiting: %s (pid=%d)", tgtOrig, flock.Pid) if FdStatus != nil { @@ -242,8 +242,11 @@ } go func() { defer Jobs.Done() tracef(CLock, "LOCK_EX: %s", fdLock.Name()) + LockAgain: if err := unix.FcntlFlock(fdLock.Fd(), unix.F_SETLKW, &flock); err != nil { - log.Fatalln(err) + log.Println(err, fdLock.Name()) + time.Sleep(10 * time.Millisecond) + goto LockAgain } lockRelease() tracef(CDebug, "waiting done: %s", tgtOrig)