aboutsummaryrefslogtreecommitdiff
path: root/src/sync
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2019-12-05 14:49:25 -0800
committerIan Lance Taylor <iant@golang.org>2019-12-06 05:12:15 +0000
commit0915a19a115ba6bd2a5a95178bfaa076041d270b (patch)
tree9fd7707517474670a71689ec59d69fc3316024a5 /src/sync
parent6ef7794b24f7c8890c673436d8509b83def2ce27 (diff)
downloadgo-0915a19a115ba6bd2a5a95178bfaa076041d270b.tar.gz
go-0915a19a115ba6bd2a5a95178bfaa076041d270b.zip
sync: deflake TestWaitGroupMisuse3
If one of the helper goroutine panics, the main goroutine call to Wait may hang forever waiting for something to call Done. Put that call in a goroutine like the others. Fixes #35774 Change-Id: I8d2b58d8f473644a49a95338f70111d4e6ed4e12 Reviewed-on: https://go-review.googlesource.com/c/go/+/210218 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
Diffstat (limited to 'src/sync')
-rw-r--r--src/sync/waitgroup_test.go11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/sync/waitgroup_test.go b/src/sync/waitgroup_test.go
index 4ab438cbab..c569e0faa2 100644
--- a/src/sync/waitgroup_test.go
+++ b/src/sync/waitgroup_test.go
@@ -147,7 +147,7 @@ func TestWaitGroupMisuse3(t *testing.T) {
}
}()
defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(4))
- done := make(chan interface{}, 2)
+ done := make(chan interface{}, 3)
// The detection is opportunistically, so we want it to panic
// at least in one run out of a million.
for i := 0; i < 1e6; i++ {
@@ -171,8 +171,13 @@ func TestWaitGroupMisuse3(t *testing.T) {
}()
wg.Wait()
}()
- wg.Wait()
- for j := 0; j < 2; j++ {
+ go func() {
+ defer func() {
+ done <- recover()
+ }()
+ wg.Wait()
+ }()
+ for j := 0; j < 3; j++ {
if err := <-done; err != nil {
panic(err)
}