diff options
| author | Alberto Bertogli <albertito@blitiri.com.ar> | 2015-11-06 01:40:56 +0000 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2015-11-12 19:48:06 +0000 |
| commit | ab196aeff21bedd7acd0e38d74e77989255f1d3f (patch) | |
| tree | 3d3e1e5e1f776a53499a649e5a7e0a1a74e4f6b8 /src/testing | |
| parent | a9ca2137aa3ebcf9cf094b20cf30cf50ba577892 (diff) | |
| download | go-ab196aeff21bedd7acd0e38d74e77989255f1d3f.tar.xz | |
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>
Diffstat (limited to 'src/testing')
| -rw-r--r-- | src/testing/testing.go | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/testing/testing.go b/src/testing/testing.go index 1dcc35ebc0..6237da9abd 100644 --- a/src/testing/testing.go +++ b/src/testing/testing.go @@ -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() |
