Skip to content

Commit

Permalink
[release-branch.go1.9] cmd/compile: limit the number of simultaneousl…
Browse files Browse the repository at this point in the history
…y opened files to avoid EMFILE/ENFILE errors

If the Go packages with enough source files,it will cause EMFILE/ENFILE error,
Fix this by limiting the number of simultaneously opened files.

Fixes #21621

Change-Id: I8555d79242d2f90771e37e073b7540fc7194a64a
Reviewed-on: https://go-review.googlesource.com/57751
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-on: https://go-review.googlesource.com/63752
Run-TryBot: Russ Cox <rsc@golang.org>
  • Loading branch information
chenzhongtao authored and rsc committed Oct 25, 2017
1 parent 8c7fa95 commit 5c48811
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/cmd/compile/internal/gc/noder.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ package gc
import (
"fmt"
"os"
"runtime"
"strconv"
"strings"
"unicode/utf8"
Expand All @@ -20,12 +21,16 @@ import (
func parseFiles(filenames []string) uint {
var lines uint
var noders []*noder
// Limit the number of simultaneously open files.
sem := make(chan struct{}, runtime.GOMAXPROCS(0)+10)

for _, filename := range filenames {
p := &noder{err: make(chan syntax.Error)}
noders = append(noders, p)

go func(filename string) {
sem <- struct{}{}
defer func() { <-sem }()
defer close(p.err)
base := src.NewFileBase(filename, absFilename(filename))

Expand Down

0 comments on commit 5c48811

Please sign in to comment.