diff options
author | Ian Lance Taylor <iant@golang.org> | 2019-12-05 14:49:25 -0800 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2019-12-06 05:12:15 +0000 |
commit | 0915a19a115ba6bd2a5a95178bfaa076041d270b (patch) | |
tree | 9fd7707517474670a71689ec59d69fc3316024a5 /src/sync | |
parent | 6ef7794b24f7c8890c673436d8509b83def2ce27 (diff) | |
download | go-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.go | 11 |
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) } |