mirror of
https://github.com/golang/go
synced 2024-11-23 10:30:03 -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:
parent
33e0f3d853
commit
42da270024
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user