diff options
author | Daniel S. Fava <danielsfava@gmail.com> | 2021-02-12 09:54:50 +0100 |
---|---|---|
committer | Dmitri Shuralyov <dmitshur@golang.org> | 2022-01-27 16:35:59 +0000 |
commit | 6cbcf581aff555d09d91ae1b3b360511ebb7e35f (patch) | |
tree | fc9206e972c694cb868870786a3c35bf031fd635 | |
parent | 57d5d8f98748d0c3f47d44898acaa019c548ffc1 (diff) | |
download | go-6cbcf581aff555d09d91ae1b3b360511ebb7e35f.tar.gz go-6cbcf581aff555d09d91ae1b3b360511ebb7e35f.zip |
[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 <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>
(cherry picked from commit aaed6cbced238030053df4e54f676a1d59df89d7)
Reviewed-on: https://go-review.googlesource.com/c/go/+/381034
Trust: Bryan Mills <bcmills@google.com>
Run-TryBot: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
-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 |