libgo/testsuite: kill sleep process in gotest
authorIan Lance Taylor <ian@gcc.gnu.org>
Mon, 3 Aug 2015 18:23:42 +0000 (18:23 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Mon, 3 Aug 2015 18:23:42 +0000 (18:23 +0000)
    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

gcc/go/gofrontend/MERGE
libgo/testsuite/gotest

index 2632f4e67241a896aa04fc28d3ea9040d1515a86..5490d9f7fa9b0ba278ccff5c1c84b1601393e9e8 100644 (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.
index 3596d727ff1ff9bb593580c4e8dcce0c2cacedb4..7d5e99f49874528a70c15ded5f43fbcd47aeb407 100755 (executable)
@@ -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