diff options
author | Daniel S. Fava <danielsfava@gmail.com> | 2021-02-12 09:54:50 +0100 |
---|---|---|
committer | Bryan C. Mills <bcmills@google.com> | 2021-02-23 22:14:38 +0000 |
commit | aaed6cbced238030053df4e54f676a1d59df89d7 (patch) | |
tree | e3d848e2bdc08ec0e7d106ed7b7c383dceccc04b /src/runtime/race | |
parent | fbed561f8a596ddbd2bb599a17ea3c6e0b223602 (diff) | |
download | go-aaed6cbced238030053df4e54f676a1d59df89d7.tar.gz go-aaed6cbced238030053df4e54f676a1d59df89d7.zip |
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 #35745.
Change-Id: Ib23ec51492ecfeed4752e020401dd25755a669ed
Reviewed-on: https://go-review.googlesource.com/c/go/+/291292
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
Trust: Bryan C. Mills <bcmills@google.com>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Diffstat (limited to 'src/runtime/race')
-rw-r--r-- | src/runtime/race/testdata/mutex_test.go | 9 |
1 files changed, 8 insertions, 1 deletions
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 |