]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: fix build on non-Linux platforms
authorBrad Fitzpatrick <bradfitz@golang.org>
Tue, 21 Nov 2017 20:46:40 +0000 (20:46 +0000)
committerAustin Clements <austin@google.com>
Tue, 21 Nov 2017 21:52:58 +0000 (21:52 +0000)
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>
src/runtime/proc_test.go
src/runtime/runtime_linux_test.go

index a0112f2fac3c0540e9ce44ccd05739d367fac94c..2ece829071d41208b0073613298ba5eb043fb667 100644 (file)
@@ -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)
        })
 }
 
index 2b6daecbfc253cb750be783a813e2bdd391b832f..612397293fafe42601da86ff71aed0a409621aed 100644 (file)
@@ -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) {