]> Cypherpunks.ru repositories - goredo.git/commitdiff
Fix some file descriptors closing
authorSergey Matveev <stargrave@stargrave.org>
Sun, 8 May 2022 07:50:07 +0000 (10:50 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Sun, 8 May 2022 08:53:50 +0000 (11:53 +0300)
cleanup.go
depfix.go
ood.go
run.go
sources.go
targets.go

index e00e3ff299842929f37ea8a5129abe82d36b68ea..d25aa3de02e91b31aabf7b758564f3de739eb244 100644 (file)
@@ -52,6 +52,7 @@ func redoDirClean(root, what string) error {
        if err != nil {
                return err
        }
+       defer dir.Close()
        for {
                fis, err := dir.Readdir(1 << 10)
                if err != nil {
@@ -88,7 +89,7 @@ func redoDirClean(root, what string) error {
                        }
                }
        }
-       return dir.Close()
+       return nil
 }
 
 func cleanupWalker(root, what string) error {
@@ -147,5 +148,5 @@ func cleanupWalker(root, what string) error {
                        }
                }
        }
-       return dir.Close()
+       return nil
 }
index 0e1d54cb8bc669440bc334268d45527fbcefddd7..3cd45bbed3f652d20ad3609b8a7bbd06284190e5 100644 (file)
--- a/depfix.go
+++ b/depfix.go
@@ -123,6 +123,7 @@ func depFix(root string) error {
                                }
                                inode, err := inodeFromFile(fd)
                                if err != nil {
+                                       fd.Close()
                                        return err
                                }
                                if inode.Size != theirInode.Size {
diff --git a/ood.go b/ood.go
index 89307720609fe558d21ebee085f109779ac04172..40e6da8b3c17f535d7f03ab4d9cbe2fa3da897ca 100644 (file)
--- a/ood.go
+++ b/ood.go
@@ -188,7 +188,7 @@ func isOOD(cwd, tgtOrig string, level int, seen map[string]struct{}) (bool, erro
                        }
                        tracef(CDebug, "ood: %s%s -> %s: same hash", indent, tgtOrig, dep)
                }
-               fd.Close() // optimization not to hold it for long
+               fd.Close()
 
                if dep == tgt {
                        tracef(CDebug, "ood: %s%s -> %s: same target", indent, tgtOrig, dep)
diff --git a/run.go b/run.go
index 32e38004e449b8fc5c814e4780e615866b1bcc2d..c0d6eda2fd0f31920d13034e28592fa05ace013c 100644 (file)
--- a/run.go
+++ b/run.go
@@ -265,6 +265,7 @@ func runScript(tgtOrig string, errs chan error, traced bool) error {
                Finish:
                        if err != nil {
                                err = TgtError{tgtOrig, err}
+                               fdLock.Close()
                        }
                        errs <- err
                }()
@@ -458,6 +459,9 @@ func runScript(tgtOrig string, errs chan error, traced bool) error {
                runErr.Started = &started
                fdStdout, err = os.OpenFile(stdoutPath, os.O_RDWR, os.FileMode(0666))
                if err != nil {
+                       if fdStderr != nil {
+                               fdStderr.Close()
+                       }
                        runErr.Err = err
                        errs <- runErr
                        return
@@ -465,6 +469,10 @@ func runScript(tgtOrig string, errs chan error, traced bool) error {
                cmd.Stdout = fdStdout
                fdDep, err = os.OpenFile(fdDepPath, os.O_WRONLY|os.O_APPEND, os.FileMode(0666))
                if err != nil {
+                       if fdStderr != nil {
+                               fdStderr.Close()
+                       }
+                       fdStdout.Close()
                        runErr.Err = err
                        errs <- runErr
                        return
index 4b77c6ebbb51f024877a6bb2e43ed775f2ec40ff..b11d9dfb60cfcf3f3e7913d94a90fa47a9ce7ff5 100644 (file)
@@ -40,10 +40,10 @@ func sourcesWalker(tgts []string) ([]string, error) {
                        return nil, err
                }
                depInfo, err := depRead(fdDep)
+               fdDep.Close()
                if err != nil {
                        return nil, err
                }
-               fdDep.Close()
                for _, m := range depInfo.ifchanges {
                        depTgt := m["Target"]
                        depTgtAbsPath, err := filepath.Abs(path.Join(cwd, depTgt))
index af4e4dae9326410a9d0754bcb7851e53f5605e30..334de9c847ee9520df24c93fb02bdf91dbcc44e2 100644 (file)
@@ -54,6 +54,7 @@ func targetsCollect(root string, tgts map[string]struct{}) error {
                                        return err
                                }
                                redoFis, err := redoDir.Readdir(0)
+                               redoDir.Close()
                                if err != nil {
                                        return err
                                }
@@ -64,7 +65,6 @@ func targetsCollect(root string, tgts map[string]struct{}) error {
                                                tgts[name[:len(name)-len(DepSuffix)]] = struct{}{}
                                        }
                                }
-                               redoDir.Close()
                        } else {
                                if err = targetsCollect(pth, tgts); err != nil {
                                        return err
@@ -72,7 +72,7 @@ func targetsCollect(root string, tgts map[string]struct{}) error {
                        }
                }
        }
-       return dir.Close()
+       return nil
 }
 
 func targetsWalker(tgts []string) ([]string, error) {