Skip to content

Commit 3557118

Browse files
committed
cmd/internal/cov: close counter data files eagerly
When reading the counter data files from a given pod, close the underlying *os.File immediately after each one is read, as opposed to using a deferred close in the loop (which will close them all at the end of the function). Doing things this way avoids running into "too many open files" when processing large clumps of counter data files. Fixes #68468. Change-Id: Ic1fe1d36c44d3f5d7318578cd18d0e65465d71d9 Reviewed-on: https://go-review.googlesource.com/c/go/+/598735 Reviewed-by: Cherry Mui <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]>
1 parent f2bcab5 commit 3557118

1 file changed

Lines changed: 10 additions & 5 deletions

File tree

src/cmd/internal/cov/readcovdata.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -204,15 +204,12 @@ func (r *CovDataReader) visitPod(p pods.Pod) error {
204204
}
205205
r.vis.VisitMetaDataFile(p.MetaFile, mfr)
206206

207-
// Read counter data files.
208-
for k, cdf := range p.CounterDataFiles {
207+
processCounterDataFile := func(cdf string, k int) error {
209208
cf, err := os.Open(cdf)
210209
if err != nil {
211210
return r.fatal("opening counter data file %s: %s", cdf, err)
212211
}
213-
defer func(f *os.File) {
214-
f.Close()
215-
}(cf)
212+
defer cf.Close()
216213
var mr *MReader
217214
mr, err = NewMreader(cf)
218215
if err != nil {
@@ -236,6 +233,14 @@ func (r *CovDataReader) visitPod(p pods.Pod) error {
236233
r.vis.VisitFuncCounterData(data)
237234
}
238235
r.vis.EndCounterDataFile(cdf, cdr, p.Origins[k])
236+
return nil
237+
}
238+
239+
// Read counter data files.
240+
for k, cdf := range p.CounterDataFiles {
241+
if err := processCounterDataFile(cdf, k); err != nil {
242+
return err
243+
}
239244
}
240245
r.vis.EndCounters()
241246

0 commit comments

Comments
 (0)