aboutsummaryrefslogtreecommitdiff
path: root/src/testing
diff options
context:
space:
mode:
authorAlberto Bertogli <albertito@blitiri.com.ar>2015-11-06 01:40:56 +0000
committerRuss Cox <rsc@golang.org>2015-11-12 19:48:06 +0000
commitab196aeff21bedd7acd0e38d74e77989255f1d3f (patch)
tree3d3e1e5e1f776a53499a649e5a7e0a1a74e4f6b8 /src/testing
parenta9ca2137aa3ebcf9cf094b20cf30cf50ba577892 (diff)
downloadgo-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.go6
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()