From 0915a19a115ba6bd2a5a95178bfaa076041d270b Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 5 Dec 2019 14:49:25 -0800 Subject: [PATCH] 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 TryBot-Result: Gobot Gobot Reviewed-by: Bryan C. Mills --- src/sync/waitgroup_test.go | 11 ++++++++--- 1 file 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) } -- 2.50.0