This patch to the gotest test script adds an external timeout, which will kill a test if the internal timeout fails due to some problem in the runtime. This patch is imperfect in that it will leave a sleep command around after the test is complete. The sleep command will eventually terminate and disappear, but it would be nicer if it were killed sooner. Unfortunately I don't see a convenient way to do that. Bootstrapped and ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline.
Ian
diff -r 03d5aa32694e libgo/testsuite/gotest --- a/libgo/testsuite/gotest Tue Apr 05 12:52:06 2011 -0700 +++ b/libgo/testsuite/gotest Tue Apr 05 14:04:59 2011 -0700 @@ -377,7 +377,20 @@ xno) ${GC} -g -c _testmain.go ${GL} *.o ${GOLIBS} - ./a.out -test.short -test.timeout=$timeout "$@" + + ./a.out -test.short -test.timeout=$timeout "$@" & + pid=$! + (sleep `expr $timeout + 10` + echo > gotest-timeout + echo "timed out in gotest" 1>&2 + kill -9 $pid) & + alarmpid=$! + wait $pid + status=$? + if ! test -f gotest-timeout; then + kill $alarmpid + fi + exit $status ;; xyes) rm -rf ../testsuite/*.o