Commit 03f42ee3 authored by Brad Fitzpatrick's avatar Brad Fitzpatrick

sync: deflake TestWaitGroupMisuse3

Previous flakes:
https://build.golang.org/log/223365dedb6b6aa0cfdf5afd0a50fd433a16bade
https://build.golang.org/log/edbea4cd3f24e707ef2ae8378559bb0fcc453c22

Dmitry says in email about this:

> The stack trace points to it pretty clearly. Done can indeed unblock
> Wait first and then panic. I guess we need to recover after first
> Done as well.

And it looks like TestWaitGroupMisuse2 was already hardened against
this.  Do the same in TestWaitGroupMisuse3.

Change-Id: I317800c7e46f13c97873f0873c759a489dd5f47d
Reviewed-on: https://go-review.googlesource.com/19183Reviewed-by: default avatarDmitry Vyukov <dvyukov@google.com>
Reviewed-by: default avatarAustin Clements <austin@google.com>
Reviewed-by: default avatarRuss Cox <rsc@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 0ed70efc
...@@ -128,13 +128,16 @@ func TestWaitGroupMisuse3(t *testing.T) { ...@@ -128,13 +128,16 @@ func TestWaitGroupMisuse3(t *testing.T) {
} }
}() }()
defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(4)) defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(4))
done := make(chan interface{}, 1) done := make(chan interface{}, 2)
// The detection is opportunistically, so we want it to panic // The detection is opportunistically, so we want it to panic
// at least in one run out of a million. // at least in one run out of a million.
for i := 0; i < 1e6; i++ { for i := 0; i < 1e6; i++ {
var wg WaitGroup var wg WaitGroup
wg.Add(1) wg.Add(1)
go func() { go func() {
defer func() {
done <- recover()
}()
wg.Done() wg.Done()
}() }()
go func() { go func() {
...@@ -150,8 +153,10 @@ func TestWaitGroupMisuse3(t *testing.T) { ...@@ -150,8 +153,10 @@ func TestWaitGroupMisuse3(t *testing.T) {
wg.Wait() wg.Wait()
}() }()
wg.Wait() wg.Wait()
if err := <-done; err != nil { for j := 0; j < 2; j++ {
panic(err) if err := <-done; err != nil {
panic(err)
}
} }
} }
t.Fatal("Should panic") t.Fatal("Should panic")
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment