mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
runtime: deflake TestNumGoroutine
Fixes #14107. Change-Id: Icd9463b1a77b139c7ebc2d8732482d704ea332d0 Reviewed-on: https://go-review.googlesource.com/19002 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
3a21f0a9c1
commit
a3c1a3f401
1 changed files with 19 additions and 4 deletions
|
|
@ -345,12 +345,27 @@ func TestNumGoroutine(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
buf := make([]byte, 1<<20)
|
buf := make([]byte, 1<<20)
|
||||||
buf = buf[:runtime.Stack(buf, true)]
|
|
||||||
|
|
||||||
n := runtime.NumGoroutine()
|
// Try up to 10 times for a match before giving up.
|
||||||
|
// This is a fundamentally racy check but it's important
|
||||||
|
// to notice if NumGoroutine and Stack are _always_ out of sync.
|
||||||
|
for i := 0; ; i++ {
|
||||||
|
// Give goroutines about to exit a chance to exit.
|
||||||
|
// The NumGoroutine and Stack below need to see
|
||||||
|
// the same state of the world, so anything we can do
|
||||||
|
// to keep it quiet is good.
|
||||||
|
runtime.Gosched()
|
||||||
|
|
||||||
if nstk := strings.Count(string(buf), "goroutine "); n != nstk {
|
n := runtime.NumGoroutine()
|
||||||
t.Fatalf("NumGoroutine=%d, but found %d goroutines in stack dump: %s", n, nstk, buf)
|
buf = buf[:runtime.Stack(buf, true)]
|
||||||
|
|
||||||
|
nstk := strings.Count(string(buf), "goroutine ")
|
||||||
|
if n == nstk {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if i >= 10 {
|
||||||
|
t.Fatalf("NumGoroutine=%d, but found %d goroutines in stack dump: %s", n, nstk, buf)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue