aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/race
diff options
context:
space:
mode:
authorDaniel S. Fava <danielsfava@gmail.com>2021-02-12 09:54:50 +0100
committerBryan C. Mills <bcmills@google.com>2021-02-23 22:14:38 +0000
commitaaed6cbced238030053df4e54f676a1d59df89d7 (patch)
treee3d848e2bdc08ec0e7d106ed7b7c383dceccc04b /src/runtime/race
parentfbed561f8a596ddbd2bb599a17ea3c6e0b223602 (diff)
downloadgo-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.go9
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