From 8076dc934e0878d8b45a6862e86b17a716e0e196 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Mon, 14 Nov 2022 17:45:04 +0300 Subject: [PATCH] Do not panic if EDEADLK is received, just retry --- run.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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) -- 2.44.0