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) {
|
func BenchmarkWakeupParallelSyscall(b *testing.B) {
|
||||||
|
if sysNanosleep == nil {
|
||||||
|
b.Skipf("skipping on %v; sysNanosleep not defined", runtime.GOOS)
|
||||||
|
}
|
||||||
benchmarkWakeupParallel(b, func(d time.Duration) {
|
benchmarkWakeupParallel(b, func(d time.Duration) {
|
||||||
// Invoke a blocking syscall directly; calling time.Sleep()
|
sysNanosleep(d)
|
||||||
// would deschedule the goroutine instead.
|
|
||||||
ts := syscall.NsecToTimespec(d.Nanoseconds())
|
|
||||||
for {
|
|
||||||
if err := syscall.Nanosleep(&ts, &ts); err != syscall.EINTR {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ import (
|
|||||||
. "runtime"
|
. "runtime"
|
||||||
"syscall"
|
"syscall"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -21,6 +22,17 @@ func init() {
|
|||||||
// for how it is used in init (must be on main thread).
|
// for how it is used in init (must be on main thread).
|
||||||
pid, tid = syscall.Getpid(), syscall.Gettid()
|
pid, tid = syscall.Getpid(), syscall.Gettid()
|
||||||
LockOSThread()
|
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) {
|
func TestLockOSThread(t *testing.T) {
|
||||||
|
Loading…
Reference in New Issue
Block a user