1
0
mirror of https://github.com/golang/go synced 2024-11-26 07:38:00 -07:00

test: make a race detector test robust to timing variations

The `external_cgo_thread` test in `runtime/race/output_test.go` was
producing intermittent failures.  The test was performing a sleep,
which may not be enough depending on how long it takes to setup the
callBack goroutine.

Added a synchronization to make sure callBack finishes before main ends.

Whether the increment to racy++ happens first in the callBack
or in main doesn't matter: the race detector should flag the race
regardless.  The output check was changed so that the test passes
regardless of which increment occurs first.

Fixes #43008

Change-Id: I325ec3dea52b3725e739fbf2bd7ae92875d2de10
Reviewed-on: https://go-review.googlesource.com/c/go/+/276752
Reviewed-by: Dmitry Vyukov <dvyukov@google.com>
Run-TryBot: Dmitry Vyukov <dvyukov@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
Daniel S Fava 2020-12-09 23:56:50 +01:00 committed by Ian Lance Taylor
parent c81343ce3a
commit 2f5b1a3974

View File

@ -284,32 +284,31 @@ static inline void startThread(cb* c) {
*/ */
import "C" import "C"
import "time" var done chan bool
var racy int var racy int
//export goCallback //export goCallback
func goCallback() { func goCallback() {
racy++ racy++
done <- true
} }
func main() { func main() {
done = make(chan bool)
var c C.cb var c C.cb
C.startThread(&c) C.startThread(&c)
time.Sleep(time.Second)
racy++ racy++
<- done
} }
`, `================== `, `==================
WARNING: DATA RACE WARNING: DATA RACE
Read at 0x[0-9,a-f]+ by main goroutine: Read at 0x[0-9,a-f]+ by .*:
main\.main\(\) main\..*
.*/main\.go:34 \+0x[0-9,a-f]+ .*/main\.go:[0-9]+ \+0x[0-9,a-f]+(?s).*
Previous write at 0x[0-9,a-f]+ by goroutine [0-9]: Previous write at 0x[0-9,a-f]+ by .*:
main\.goCallback\(\) main\..*
.*/main\.go:27 \+0x[0-9,a-f]+ .*/main\.go:[0-9]+ \+0x[0-9,a-f]+(?s).*
_cgoexp_[0-9a-z]+_goCallback\(\)
.*_cgo_gotypes\.go:[0-9]+ \+0x[0-9,a-f]+
Goroutine [0-9] \(running\) created at: Goroutine [0-9] \(running\) created at:
runtime\.newextram\(\) runtime\.newextram\(\)