libgo/testsuite: kill sleep process in gotest

This change modifies the "gotest" shell script
    to kill all processes, including "sleep", spawned
    by the timeout subshell. This prevents the sleep
    process from living beyond the gotest process.
    
    BACKGROUND
    
    The "gotest" shell script spawns "sleep" processes
    in the background to kill off test cases that run
    past their specified timeout. There are commands
    included that appear to kill the sleep process,
    but they only kill the parent shell, causing the
    sleep process to reparent.
    
    The orphaned sleep process can cause issues when
    gotest is run under some build systems, such as
    Ninja [0]. The particular issue with Ninja is the
    method it uses to identify terminated processes:
    it creates a pipe, passes the write end to the
    child process, and waits for EOF. In the case of
    libgo/gotest, the orphaned sleep process inherits
    the pipe FD and keeps it open for 4 minutes by
    default.
    
    [0] https://github.com/martine/ninja
    
    Reviewed-on: https://go-review.googlesource.com/12227

From-SVN: r226526
This commit is contained in:
Ian Lance Taylor 2015-08-03 18:23:42 +00:00
parent 3d6d2a63b2
commit ca81dee392
2 changed files with 2 additions and 2 deletions

View File

@ -1,4 +1,4 @@
d5aad2f400a0f21724e33e4ae48e1583ed8b1a87
33d59eff1bd5de29f1fbde3b7625db28595835fd
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.

View File

@ -518,7 +518,7 @@ xno)
wait $pid
status=$?
if ! test -f gotest-timeout; then
kill $alarmpid
ps -o pid,ppid | grep " $alarmpid" | cut -f1 -d" " | xargs kill -9
fi
else
if test "$trace" = "true"; then