1
0
mirror of https://github.com/golang/go synced 2024-11-23 13:20:09 -07:00

runtime: fix flaky TestBlockProfile test

It has been failing periodically on Solaris/x64.
Change blockevent so it always records an event if we called
SetBlockProfileRate(1), even if the time delta is negative or zero.

Hopefully this will fix the test on Solaris.
Caveat: I don't actually know what the Solaris problem is, this
is just an educated guess.

LGTM=dave
R=dvyukov, dave
CC=golang-codereviews
https://golang.org/cl/159150043
This commit is contained in:
Keith Randall 2014-10-20 15:48:42 -07:00
parent 9d06cfc810
commit 3ec8fe45cf

View File

@ -284,6 +284,8 @@ func SetBlockProfileRate(rate int) {
var r int64
if rate <= 0 {
r = 0 // disable profiling
} else if rate == 1 {
r = 1 // profile everything
} else {
// convert ns to cycles, use float64 to prevent overflow during multiplication
r = int64(float64(rate) * float64(tickspersecond()) / (1000 * 1000 * 1000))
@ -297,7 +299,7 @@ func SetBlockProfileRate(rate int) {
func blockevent(cycles int64, skip int) {
if cycles <= 0 {
return
cycles = 1
}
rate := int64(atomicload64(&blockprofilerate))
if rate <= 0 || (rate > cycles && int64(fastrand1())%rate > cycles) {