diff options
author | Russ Cox <rsc@golang.org> | 2015-09-01 22:26:43 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2015-09-01 22:26:43 +0000 |
commit | c38a71e0a651f0971d1bcafe237193be2cd81c29 (patch) | |
tree | b60a44a905945100f46b6fc9184df866dbccf955 | |
parent | ad62f1bd4fbff4bc4ad3f425851855fee367c55c (diff) | |
parent | 93604a3dc2a5ae0168456c672ec35cc90ea881e6 (diff) | |
download | tools-studio-master-dev.tar.gz |
go/loader: fix fd leak and limit calls to ioutil.ReadDirstudio-3.2.1studio-3.1.2studio-3.0studio-2.3studio-2.0-rc1studio-2.0gradle_3.1.2gradle_3.0.0gradle_2.3.0gradle_2.0.0studio-master-devmirror-goog-studio-master-dev
automerge: 93604a3
* commit '93604a3dc2a5ae0168456c672ec35cc90ea881e6':
go/loader: fix fd leak and limit calls to ioutil.ReadDir
-rw-r--r-- | go/loader/cgo.go | 2 | ||||
-rw-r--r-- | go/loader/loader.go | 2 | ||||
-rw-r--r-- | go/loader/util.go | 6 |
3 files changed, 6 insertions, 4 deletions
diff --git a/go/loader/cgo.go b/go/loader/cgo.go index 299e725..fb39e53 100644 --- a/go/loader/cgo.go +++ b/go/loader/cgo.go @@ -87,9 +87,9 @@ func processCgoFiles(bp *build.Package, fset *token.FileSet, DisplayPath func(pa if err != nil { return nil, err } - defer rd.Close() display := filepath.Join(bp.Dir, cgoDisplayFiles[i]) f, err := parser.ParseFile(fset, display, rd, mode) + rd.Close() if err != nil { return nil, err } diff --git a/go/loader/loader.go b/go/loader/loader.go index bbacc5b..1d3ead0 100644 --- a/go/loader/loader.go +++ b/go/loader/loader.go @@ -449,7 +449,9 @@ func (conf *Config) Load() (*Program, error) { conf.FindPackage = func(ctxt *build.Context, path string) (*build.Package, error) { // TODO(adonovan): cache calls to build.Import // so we don't do it three times per test package. + ioLimit <- true bp, err := ctxt.Import(path, conf.Cwd, 0) + <-ioLimit if _, ok := err.(*build.NoGoError); ok { return bp, nil // empty directory is not an error } diff --git a/go/loader/util.go b/go/loader/util.go index 0404e99..3b64856 100644 --- a/go/loader/util.go +++ b/go/loader/util.go @@ -19,7 +19,7 @@ import ( // We use a counting semaphore to limit // the number of parallel I/O calls per process. -var sema = make(chan bool, 10) +var ioLimit = make(chan bool, 10) // parseFiles parses the Go source files within directory dir and // returns the ASTs of the ones that could be at least partially parsed, @@ -42,10 +42,10 @@ func parseFiles(fset *token.FileSet, ctxt *build.Context, displayPath func(strin } wg.Add(1) go func(i int, file string) { - sema <- true // wait + ioLimit <- true // wait defer func() { wg.Done() - <-sema // signal + <-ioLimit // signal }() var rd io.ReadCloser var err error |