1
0
mirror of https://github.com/golang/go synced 2024-11-17 22:54:48 -07:00

testing: only call flag.Parse if it has not been called before

Calling flag.Parse twice can be problematic if other goroutines called
flag.Parsed in between: the race detector complains due to the
write after read from a different goroutine.

This can happen if TestMain calls flag.Parse and launches goroutines
that call flag.Parsed, for example if it initializes a server which
checks flags.

This patch makes testing.M.Run only parse the flags if they have not
been parsed already.

Change-Id: Id9f8c31c5f90614e3f34c63d1a32cf7e9055d68e
Reviewed-on: https://go-review.googlesource.com/16739
Reviewed-by: Russ Cox <rsc@golang.org>
This commit is contained in:
Alberto Bertogli 2015-11-06 01:40:56 +00:00 committed by Russ Cox
parent a9ca2137aa
commit ab196aeff2

View File

@ -485,7 +485,11 @@ func MainStart(matchString func(pat, str string) (bool, error), tests []Internal
// Run runs the tests. It returns an exit code to pass to os.Exit.
func (m *M) Run() int {
flag.Parse()
// TestMain may have already called flag.Parse.
if !flag.Parsed() {
flag.Parse()
}
parseCpuList()
before()