1
0
mirror of https://github.com/golang/go synced 2024-11-23 02:00:03 -07:00
go/misc/cgo/test/issue1560.go
Shenghou Ma 018bcc3535 runtime, misc/cgo/test: fix build for Linux/ARM
1. In CL 5989057, I made a mistake in the last minute change.
"MOVW.W R4, -4(SP)" should really be "MOVW.W R4, -4(R13)",
as 5l will rewrite offset for SP.
2. misc/cgo/test/issue1560.go tests for parallel sleep of 1s,
but on ARM, the deadline is frequently missed, so change sleep
time to 2s on ARM.

R=golang-dev, dave, rsc
CC=golang-dev
https://golang.org/cl/6202043
2012-05-05 01:35:13 +08:00

53 lines
1.0 KiB
Go

// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package cgotest
/*
#include <unistd.h>
unsigned int sleep(unsigned int seconds);
extern void BackgroundSleep(int);
void twoSleep(int);
*/
import "C"
import (
"runtime"
"testing"
"time"
)
var sleepDone = make(chan bool)
func parallelSleep(n int) {
C.twoSleep(C.int(n))
<-sleepDone
}
//export BackgroundSleep
func BackgroundSleep(n int) {
go func() {
C.sleep(C.uint(n))
sleepDone <- true
}()
}
func testParallelSleep(t *testing.T) {
sleepSec := 1
if runtime.GOARCH == "arm" {
// on ARM, the 1.3s deadline is frequently missed,
// so increase sleep time to 2s
sleepSec = 2
}
start := time.Now()
parallelSleep(sleepSec)
dt := time.Now().Sub(start)
// bug used to run sleeps in serial, producing a 2*sleepSec-second delay.
if dt >= time.Duration(sleepSec)*1300*time.Millisecond {
t.Fatalf("parallel %d-second sleeps slept for %f seconds", sleepSec, dt.Seconds())
}
}