]> Cypherpunks.ru repositories - goredo.git/commitdiff
Do not panic if EDEADLK is received, just retry
authorSergey Matveev <stargrave@stargrave.org>
Mon, 14 Nov 2022 14:45:04 +0000 (17:45 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Mon, 14 Nov 2022 15:02:06 +0000 (18:02 +0300)
run.go

diff --git a/run.go b/run.go
index 01da3b26b4cfe1010c57fa6397415d4766fad007..1bdbfe861c3b132f859ab0b5d0cf2413d98dba4f 100644 (file)
--- 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)