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
-d5aad2f400a0f21724e33e4ae48e1583ed8b1a87
+33d59eff1bd5de29f1fbde3b7625db28595835fd
The first line of this file holds the git revision number of the last
merge done from the gofrontend repository.
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