mirror of
https://github.com/golang/go
synced 2024-11-19 13:04:45 -07:00
runtime: fix build on non-Linux platforms
CL 78538 was updated after running TryBots to depend on syscall.NanoSleep which isn't available on all non-Linux platforms. Change-Id: I1fa615232b3920453431861310c108b208628441 Reviewed-on: https://go-review.googlesource.com/79175 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Austin Clements <austin@google.com>
This commit is contained in:
parent
597213c87c
commit
1e3f563b14
@ -750,16 +750,18 @@ func BenchmarkWakeupParallelSpinning(b *testing.B) {
|
||||
})
|
||||
}
|
||||
|
||||
// sysNanosleep is defined by OS-specific files (such as runtime_linux_test.go)
|
||||
// to sleep for the given duration. If nil, dependent tests are skipped.
|
||||
// The implementation should invoke a blocking system call and not
|
||||
// call time.Sleep, which would deschedule the goroutine.
|
||||
var sysNanosleep func(d time.Duration)
|
||||
|
||||
func BenchmarkWakeupParallelSyscall(b *testing.B) {
|
||||
if sysNanosleep == nil {
|
||||
b.Skipf("skipping on %v; sysNanosleep not defined", runtime.GOOS)
|
||||
}
|
||||
benchmarkWakeupParallel(b, func(d time.Duration) {
|
||||
// Invoke a blocking syscall directly; calling time.Sleep()
|
||||
// would deschedule the goroutine instead.
|
||||
ts := syscall.NsecToTimespec(d.Nanoseconds())
|
||||
for {
|
||||
if err := syscall.Nanosleep(&ts, &ts); err != syscall.EINTR {
|
||||
return
|
||||
}
|
||||
}
|
||||
sysNanosleep(d)
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -8,6 +8,7 @@ import (
|
||||
. "runtime"
|
||||
"syscall"
|
||||
"testing"
|
||||
"time"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
@ -21,6 +22,17 @@ func init() {
|
||||
// for how it is used in init (must be on main thread).
|
||||
pid, tid = syscall.Getpid(), syscall.Gettid()
|
||||
LockOSThread()
|
||||
|
||||
sysNanosleep = func(d time.Duration) {
|
||||
// Invoke a blocking syscall directly; calling time.Sleep()
|
||||
// would deschedule the goroutine instead.
|
||||
ts := syscall.NsecToTimespec(d.Nanoseconds())
|
||||
for {
|
||||
if err := syscall.Nanosleep(&ts, &ts); err != syscall.EINTR {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestLockOSThread(t *testing.T) {
|
||||
|
Loading…
Reference in New Issue
Block a user