1
0
mirror of https://github.com/golang/go synced 2024-11-23 12:30:11 -07:00

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/9368
Reviewed-by: Austin Clements <austin@google.com>
This commit is contained in:
Russ Cox 2015-04-27 16:08:11 -04:00
parent 33e0f3d853
commit 42da270024

View File

@ -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) {