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:
parent
9d06cfc810
commit
3ec8fe45cf
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user