From b3631f17ba7427e538e8f6bd84ac4ead1aaab3f2 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Sun, 8 May 2022 10:50:07 +0300 Subject: [PATCH] Fix some file descriptors closing --- cleanup.go | 5 +++-- depfix.go | 1 + ood.go | 2 +- run.go | 8 ++++++++ sources.go | 2 +- targets.go | 4 ++-- 6 files changed, 16 insertions(+), 6 deletions(-) diff --git a/cleanup.go b/cleanup.go index e00e3ff..d25aa3d 100644 --- a/cleanup.go +++ b/cleanup.go @@ -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 } diff --git a/depfix.go b/depfix.go index 0e1d54c..3cd45bb 100644 --- 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 8930772..40e6da8 100644 --- 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 32e3800..c0d6eda 100644 --- 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 diff --git a/sources.go b/sources.go index 4b77c6e..b11d9df 100644 --- a/sources.go +++ b/sources.go @@ -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)) diff --git a/targets.go b/targets.go index af4e4da..334de9c 100644 --- a/targets.go +++ b/targets.go @@ -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) { -- 2.44.0