mirror of
https://github.com/golang/go
synced 2024-11-26 09:38:10 -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:
parent
c81343ce3a
commit
2f5b1a3974
@ -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\(\)
|
||||||
|
Loading…
Reference in New Issue
Block a user