From: Russ Cox Date: Tue, 2 Feb 2016 15:15:34 +0000 (-0500) Subject: runtime: deflake TestGoroutineProfileTrivial X-Git-Tag: go1.6rc2~2^2~2 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=1c6a35b4fe894ab0dc229be35d8a5fb0080a31d6;p=gostls13.git runtime: deflake TestGoroutineProfileTrivial Failed at https://storage.googleapis.com/go-build-log/9875de36/nacl-amd64p32_931ba6cf.log Change-Id: I2bc204ed58da543ee2534b69c29c8e8485d54683 Reviewed-on: https://go-review.googlesource.com/19155 Run-TryBot: Russ Cox Reviewed-by: Brad Fitzpatrick Reviewed-by: Austin Clements TryBot-Result: Gobot Gobot --- diff --git a/src/runtime/runtime_test.go b/src/runtime/runtime_test.go index 581f52bcb0..a6150a77ee 100644 --- a/src/runtime/runtime_test.go +++ b/src/runtime/runtime_test.go @@ -310,13 +310,22 @@ func TestAppendSliceGrowth(t *testing.T) { } func TestGoroutineProfileTrivial(t *testing.T) { - n1, ok := GoroutineProfile(nil) // should fail, there's at least 1 goroutine - if n1 < 1 || ok { - t.Fatalf("GoroutineProfile(nil) = %d, %v, want >0, false", n1, ok) - } - - n2, ok := GoroutineProfile(make([]StackRecord, n1)) - if n2 != n1 || !ok { - t.Fatalf("GoroutineProfile(%d) = %d, %v, want %d, true", n1, n2, ok, n1) + // Calling GoroutineProfile twice in a row should find the same number of goroutines, + // but it's possible there are goroutines just about to exit, so we might end up + // with fewer in the second call. Try a few times; it should converge once those + // zombies are gone. + for i := 0; ; i++ { + n1, ok := GoroutineProfile(nil) // should fail, there's at least 1 goroutine + if n1 < 1 || ok { + t.Fatalf("GoroutineProfile(nil) = %d, %v, want >0, false", n1, ok) + } + n2, ok := GoroutineProfile(make([]StackRecord, n1)) + if n2 == n1 && ok { + break + } + t.Logf("GoroutineProfile(%d) = %d, %v, want %d, true", n1, n2, ok, n1) + if i >= 10 { + t.Fatalf("GoroutineProfile not converging") + } } }