From: Sergey Matveev Date: Mon, 14 Nov 2022 14:45:04 +0000 (+0300) Subject: Do not panic if EDEADLK is received, just retry X-Git-Tag: v1.28.0~1 X-Git-Url: http://www.git.cypherpunks.ru/?p=goredo.git;a=commitdiff_plain;h=8076dc934e0878d8b45a6862e86b17a716e0e196 Do not panic if EDEADLK is received, just retry --- diff --git a/run.go b/run.go index 01da3b2..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)