]> Cypherpunks.ru repositories - goredo.git/commitdiff
Less unnecessary Close()s
authorSergey Matveev <stargrave@stargrave.org>
Sun, 1 Oct 2023 06:57:57 +0000 (09:57 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sun, 1 Oct 2023 07:01:51 +0000 (10:01 +0300)
run.go

diff --git a/run.go b/run.go
index 89640cbf927d006fbae011c62213c559c976ddaf..a3e0fd65fb4ff8fc28d8805c1b91f073d49d2426 100644 (file)
--- a/run.go
+++ b/run.go
@@ -243,25 +243,25 @@ func runScript(tgtOrig string, errs chan error, forced, traced bool) error {
                                }
                        }
                        build, err := depReadBuild(path.Join(redoDir, tgt+DepSuffix))
-                       if err != nil {
+                       if err == nil {
+                               if build != BuildUUID {
+                                       err = errors.New("was not built: build differs")
+                               }
+                       } else {
                                if errors.Is(err, fs.ErrNotExist) {
                                        err = errors.New("was not built: no .rec")
                                }
-                               goto Finish
                        }
-                       if build != BuildUUID {
-                               err = errors.New("was not built: build differs")
-                       }
-               Finish:
                        if err != nil {
                                err = TgtError{tgtOrig, err}
-                               fdLock.Close()
                        }
                        errs <- err
                }()
                return nil
        }
 
+       // It scans the whole .rec file while searching for the single target,
+       // but that one is always located at the very end
        depInfo, err := depRead(path.Join(redoDir, tgt+DepSuffix))
        if err != nil {
                if errors.Is(err, fs.ErrNotExist) {
@@ -304,10 +304,13 @@ func runScript(tgtOrig string, errs chan error, forced, traced bool) error {
                lockRelease()
                return TgtError{tgtOrig, ErrLine(err)}
        }
+       fdDepOpened := true
        fdDepPath := fdDep.Name()
        cleanup := func() {
                lockRelease()
-               fdDep.Close()
+               if fdDepOpened {
+                       fdDep.Close()
+               }
                os.Remove(fdDep.Name())
        }
        if _, err = recfile.NewWriter(fdDep).WriteFields(
@@ -352,6 +355,7 @@ func runScript(tgtOrig string, errs chan error, forced, traced bool) error {
                return TgtError{tgtOrig, ErrLine(err)}
        }
        fdDep.Close()
+       fdDepOpened = false
        tracef(CWait, "%s", runErr.Name())
 
        // Prepare command line
@@ -488,13 +492,16 @@ func runScript(tgtOrig string, errs chan error, forced, traced bool) error {
                        errs <- runErr
                        return
                }
+               fdDepOpened = true
                cmd.ExtraFiles = append(cmd.ExtraFiles, fdDep)
                cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%d", EnvDepFd, 3+fdNum))
                fdNum++
                cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", EnvDepCwd, cwd))
 
                defer func() {
-                       fdDep.Close()
+                       if fdDepOpened {
+                               fdDep.Close()
+                       }
                        fdStdout.Close()
                        if fdStderr != nil {
                                fdStderr.Close()
@@ -793,6 +800,7 @@ func runScript(tgtOrig string, errs chan error, forced, traced bool) error {
                        }
                }
                fdDep.Close()
+               fdDepOpened = false
 
                // Post-commit .rec sanitizing
                if depInfo, err := depRead(fdDepPath); err == nil {