From: Ian Lance Taylor Date: Thu, 5 Dec 2019 22:49:25 +0000 (-0800) Subject: sync: deflake TestWaitGroupMisuse3 X-Git-Tag: go1.14beta1~51 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=0915a19a115ba6bd2a5a95178bfaa076041d270b;p=gostls13.git 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 --- 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) }