Skip to content

Commit 5a90270

Browse files
hopehookgopherbot
authored andcommitted
cmd/compile: fix deadlock on syntax error
Fixes golang#52127 Change-Id: I6523c83350cb9263d23e3e8b472fe63a5cc99c2e Reviewed-on: https://go-review.googlesource.com/c/go/+/398014 Reviewed-by: Matthew Dempsky <[email protected]> Run-TryBot: Matthew Dempsky <[email protected]> Auto-Submit: Matthew Dempsky <[email protected]> TryBot-Result: Gopher Robot <[email protected]> Trust: Cherry Mui <[email protected]>
1 parent c451a02 commit 5a90270

File tree

1 file changed

+21
-16
lines changed

1 file changed

+21
-16
lines changed

src/cmd/compile/internal/noder/noder.go

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -33,29 +33,34 @@ func LoadPackage(filenames []string) {
3333
sem := make(chan struct{}, runtime.GOMAXPROCS(0)+10)
3434

3535
noders := make([]*noder, len(filenames))
36-
for i, filename := range filenames {
36+
for i := range noders {
3737
p := noder{
3838
err: make(chan syntax.Error),
3939
}
4040
noders[i] = &p
41+
}
4142

42-
filename := filename
43-
go func() {
43+
go func() {
44+
for i, filename := range filenames {
45+
filename := filename
46+
p := noders[i]
4447
sem <- struct{}{}
45-
defer func() { <-sem }()
46-
defer close(p.err)
47-
fbase := syntax.NewFileBase(filename)
48-
49-
f, err := os.Open(filename)
50-
if err != nil {
51-
p.error(syntax.Error{Msg: err.Error()})
52-
return
53-
}
54-
defer f.Close()
48+
go func() {
49+
defer func() { <-sem }()
50+
defer close(p.err)
51+
fbase := syntax.NewFileBase(filename)
52+
53+
f, err := os.Open(filename)
54+
if err != nil {
55+
p.error(syntax.Error{Msg: err.Error()})
56+
return
57+
}
58+
defer f.Close()
5559

56-
p.file, _ = syntax.Parse(fbase, f, p.error, p.pragma, mode) // errors are tracked via p.error
57-
}()
58-
}
60+
p.file, _ = syntax.Parse(fbase, f, p.error, p.pragma, mode) // errors are tracked via p.error
61+
}()
62+
}
63+
}()
5964

6065
var lines uint
6166
for _, p := range noders {

0 commit comments

Comments
 (0)