From 6cbcf581aff555d09d91ae1b3b360511ebb7e35f Mon Sep 17 00:00:00 2001 From: "Daniel S. Fava" Date: Fri, 12 Feb 2021 09:54:50 +0100 Subject: [release-branch.go1.16] testing/race: fixing intermittent test failure Test NoRaceMutexPureHappensBefore in runtime/race/testdata/mutex_test.go expects the second spawned goroutine to run after the first. The test attempts to force this scheduling with a 10 millisecond wait. Following a suggestion by Bryan Mills, we force this scheduling using a shared variable whose access take place within the existing mutex. Fixes #50832. Updates #35745. Change-Id: Ib23ec51492ecfeed4752e020401dd25755a669ed Reviewed-on: https://go-review.googlesource.com/c/go/+/291292 Reviewed-by: Bryan C. Mills Reviewed-by: Dmitry Vyukov Trust: Bryan C. Mills Run-TryBot: Bryan C. Mills TryBot-Result: Go Bot (cherry picked from commit aaed6cbced238030053df4e54f676a1d59df89d7) Reviewed-on: https://go-review.googlesource.com/c/go/+/381034 Trust: Bryan Mills Run-TryBot: Bryan Mills TryBot-Result: Gopher Robot Reviewed-by: Dmitri Shuralyov --- src/runtime/race/testdata/mutex_test.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/runtime/race/testdata/mutex_test.go b/src/runtime/race/testdata/mutex_test.go index cbed2d370c..9dbed9a2c9 100644 --- a/src/runtime/race/testdata/mutex_test.go +++ b/src/runtime/race/testdata/mutex_test.go @@ -78,16 +78,23 @@ func TestNoRaceMutexPureHappensBefore(t *testing.T) { var mu sync.Mutex var x int16 = 0 _ = x + written := false ch := make(chan bool, 2) go func() { x = 1 mu.Lock() + written = true mu.Unlock() ch <- true }() go func() { - <-time.After(1e5) + time.Sleep(100 * time.Microsecond) mu.Lock() + for !written { + mu.Unlock() + time.Sleep(100 * time.Microsecond) + mu.Lock() + } mu.Unlock() x = 1 ch <- true -- cgit v1.2.3-54-g00ecf