]> Cypherpunks repositories - gostls13.git/commitdiff
test: make a race detector test robust to timing variations
authorDaniel S Fava <danielsfava@gmail.com>
Wed, 9 Dec 2020 22:56:50 +0000 (23:56 +0100)
committerIan Lance Taylor <iant@golang.org>
Mon, 14 Dec 2020 20:30:16 +0000 (20:30 +0000)
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>

src/runtime/race/output_test.go

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