Commit 42da2700 authored by Russ Cox's avatar Russ Cox

runtime: fix race in BenchmarkPingPongHog

The master goroutine was returning before
the child goroutine had done its final i < b.N
(the one that fails and causes it to exit the loop)
and then the benchmark harness was updating
b.N, causing a read+write race on b.N.

Change-Id: I2504270a0de30544736f6c32161337a25b505c3e
Reviewed-on: https://go-review.googlesource.com/9368Reviewed-by: 's avatarAustin Clements <austin@google.com>
parent 33e0f3d8
......@@ -366,18 +366,22 @@ func BenchmarkPingPongHog(b *testing.B) {
pong <- <-ping
}
close(stop)
done <- true
}()
go func() {
for i := 0; i < b.N; i++ {
ping <- <-pong
}
done <- true
}()
b.ResetTimer()
ping <- true // Start ping-pong
<-stop
b.StopTimer()
<-ping // Let last ponger exit
<-done // Make sure hog exits
<-done // Make sure goroutines exit
<-done
<-done
}
func stackGrowthRecursive(i int) {
......
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