X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=run.go;h=1bdbfe861c3b132f859ab0b5d0cf2413d98dba4f;hb=ae56a3b66db9f60612f656b0046427ef139c2119;hp=985db83918e0879af20b3988215ab3f96b957f03;hpb=9aec69aeb699839887d0e7a0d1e7b2f4900e83b0;p=goredo.git diff --git a/run.go b/run.go index 985db83..1bdbfe8 100644 --- a/run.go +++ b/run.go @@ -217,7 +217,7 @@ func runScript(tgtOrig string, errs chan error, traced bool) error { 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 @@ func runScript(tgtOrig string, errs chan error, traced bool) error { } 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 @@ func runScript(tgtOrig string, errs chan error, traced bool) error { 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) @@ -577,7 +580,6 @@ func runScript(tgtOrig string, errs chan error, traced bool) error { os.Remove(fdDep.Name()) os.Remove(fdStdout.Name()) os.Remove(tmpPath) - os.Remove(fdLock.Name()) if FdStatus != nil { if _, err = FdStatus.Write([]byte{StatusDone}); err != nil { log.Fatalln(err)