Subject: bug#8788: Weird testsuite failure on NetBSD (parallel tests, background processes)

From: Stefano Lattarini <[email-masked]>
Date: Thu, 2 Jun 2011 18:43:53 +0200

Hello automakers.

While teststing the `testsuite-work' branch on NetBSD 5, I've encountered
a weird failure in the test `parallel-tests3.test', which actually caused
the whole testsuite to crash (!) due to a stray SIGTERM.

I've reduced the failure to the attached testcase, which expose the bug
also for the older automake release 1.11.1.

Note that, on GNU/Linux and Solaris 10, the testcases passes without
problems.

To reproduce from a freshly extracted 1.11.1 tarball, make sure GNU make
is in PATH named as `gmake', then run:
  $ ./configure && make
  $ cd tests
  $ cp /path/to/saved/foo.test .
  $ sh foo.test
  ...
  gmake[2]: Leaving directory `/tmp/automake-1.11.1/tests/foo.dir'
  gmake[1]: Leaving directory `/tmp/automake-1.11.1/tests/foo.dir'
  [2]   Terminated              ${sleep}
  gmake: *** [check-am] Terminated
  + signal=15
  + Exit 1
  + set +e
  [1]   Terminated+               ${MAKE} -j1 checkexit
   1
  + exit 1
  + exit_status=1
  + set +e
  + cd /tmp/automake-1.11.1/tests
  + test 15 != 0
  + echo foo: caught signal 15
  foo: caught signal 15
  + echo foo: exit 1
  foo: exit 1
  + exit 1

Attached are the config.log file and test logs for /bin/sh, /bin/ksh, and
bash 4.1.

Any idea of what's going on?

Regards,
  Stefano
/tmp/automake-1.11.1/tests:/home/slattarini/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R7/bin:/usr/X11R6/bin:/usr/pkg/bin:/usr/pkg/sbin:/usr/games:/usr/local/bin:/usr/local/sbin
=== Running test foo.test
+ pwd
/tmp/automake-1.11.1/tests/foo.dir
+ MAKE=gmake
+ export MAKE
+ cat
+ > configure.in 
+ << "END" 
+ cat
+ > Makefile.am 
+ << "END" 
+ cat
+ > foo1.test 
+ << "END" 
+ chmod a+x foo1.test
+ cat
+ > foo2.test 
+ << "END" 
+ chmod a+x foo2.test
+ cat
+ > foo3.test 
+ << "END" 
+ chmod a+x foo3.test
+ aclocal-1.11 -Werror
+ autoconf
+ automake-1.11 --foreign -Werror -Wall -a
+ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... ./install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether gmake sets $(MAKE)... yes
configure: creating ./config.status
config.status: creating Makefile
+ sleep 2
+ gmake -j1 check
gmake  check-TESTS
gmake[1]: Entering directory `/tmp/automake-1.11.1/tests/foo.dir'
gmake[2]: Entering directory `/tmp/automake-1.11.1/tests/foo.dir'
PASS: foo1.test
+ kill 20320
+ test ! -f test-suite.log
+ sleep 2
PASS: foo2.test
PASS: foo3.test
==================
All 3 tests passed
==================
gmake[2]: Leaving directory `/tmp/automake-1.11.1/tests/foo.dir'
gmake[1]: Leaving directory `/tmp/automake-1.11.1/tests/foo.dir'
Terminated 
+ signal=15
+ Exit 1
gmake: *** [check-am] Terminated
foo: caught signal 15
foo: exit 1
/tmp/automake-1.11.1/tests:/home/slattarini/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R7/bin:/usr/X11R6/bin:/usr/pkg/bin:/usr/pkg/sbin:/usr/games:/usr/local/bin:/usr/local/sbin
=== Running test foo.test
++ pwd
/tmp/automake-1.11.1/tests/foo.dir
+ MAKE=gmake
+ export MAKE
+ cat
+ cat
+ for i in 1 2 3
+ cat
+ chmod a+x foo1.test
+ for i in 1 2 3
+ cat
+ chmod a+x foo2.test
+ for i in 1 2 3
+ cat
+ chmod a+x foo3.test
+ aclocal-1.11 -Werror
+ autoconf
+ automake-1.11 --foreign -Werror -Wall -a
+ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... ./install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether gmake sets $(MAKE)... yes
configure: creating ./config.status
config.status: creating Makefile
+ sleep 2
+ gmake -j1 check
gmake  check-TESTS
gmake[1]: Entering directory `/tmp/automake-1.11.1/tests/foo.dir'
gmake[2]: Entering directory `/tmp/automake-1.11.1/tests/foo.dir'
PASS: foo1.test
+ kill 22441
+ test '!' -f test-suite.log
+ sleep 2
PASS: foo2.test
PASS: foo3.test
==================
All 3 tests passed
==================
gmake[2]: Leaving directory `/tmp/automake-1.11.1/tests/foo.dir'
gmake[1]: Leaving directory `/tmp/automake-1.11.1/tests/foo.dir'
Terminated
++ signal=15
++ Exit 1
++ set +e
gmake: *** [check-am] Terminated
++ exit 1
++ exit 1
+ exit_status=1
+ set +e
+ cd /tmp/automake-1.11.1/tests
+ case $exit_status,$keep_testdirs in
+ test 15 '!=' 0
+ echo 'foo: caught signal 15'
foo: caught signal 15
+ echo 'foo: exit 1'
foo: exit 1
+ exit 1
/tmp/automake-1.11.1/tests:/home/slattarini/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R7/bin:/usr/X11R6/bin:/usr/pkg/bin:/usr/pkg/sbin:/usr/games:/usr/local/bin:/usr/local/sbin
=== Running test foo.test
+ pwd
/tmp/automake-1.11.1/tests/foo.dir
+ MAKE=gmake
+ export MAKE
+ cat
+ cat
+ cat
+ chmod a+x foo1.test
+ cat
+ chmod a+x foo2.test
+ cat
+ chmod a+x foo3.test
+ aclocal-1.11 -Werror
+ autoconf
+ automake-1.11 --foreign -Werror -Wall -a
+ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... ./install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether gmake sets $(MAKE)... yes
configure: creating ./config.status
config.status: creating Makefile
+ gmake -j1 check
+ sleep 2
gmake  check-TESTS
gmake[1]: Entering directory `/tmp/automake-1.11.1/tests/foo.dir'
gmake[2]: Entering directory `/tmp/automake-1.11.1/tests/foo.dir'
PASS: foo1.test
+ kill 26199
+ test ! -f test-suite.log
+ sleep 2
PASS: foo2.test
PASS: foo3.test
==================
All 3 tests passed
==================
gmake[2]: Leaving directory `/tmp/automake-1.11.1/tests/foo.dir'
gmake[1]: Leaving directory `/tmp/automake-1.11.1/tests/foo.dir'
[2]   Terminated              ${sleep}
+ signal=15
+ Exit 1
+ set +e
gmake: *** [check-am] Terminated
[1]   Terminated              ${MAKE} -j1 check
+ exit 1
+ exit 1
+ exit_status=1
+ set +e
+ cd /tmp/automake-1.11.1/tests
+ test 15 != 0
+ echo foo: caught signal 15
foo: caught signal 15
+ echo foo: exit 1
foo: exit 1
+ exit 1
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by GNU Automake configure 1.11.1, which was
generated by GNU Autoconf 2.65.  Invocation command line was

  $ ./configure 

## --------- ##
## Platform. ##
## --------- ##

hostname = gcc70.fsffrance.org
uname -m = amd64
uname -r = 5.1
uname -s = NetBSD
uname -v = NetBSD 5.1 (GENERIC) #0: Sat Nov  6 13:19:33 UTC 2010  [email-masked]:/home/builds/ab/netbsd-5-1-RELEASE/amd64/201011061943Z-obj/home/builds/ab/netbsd-5-1-RELEASE/src/sys/arch/amd64/compile/GENERIC

/usr/bin/uname -p = x86_64
/bin/uname -X     = unknown

/bin/arch              = unknown
/usr/bin/arch -k       = unknown
/usr/convex/getsysinfo = unknown
/usr/bin/hostinfo      = unknown
/bin/machine           = unknown
/usr/bin/oslevel       = unknown
/bin/universe          = unknown

PATH: /home/slattarini/bin
PATH: /bin
PATH: /sbin
PATH: /usr/bin
PATH: /usr/sbin
PATH: /usr/X11R7/bin
PATH: /usr/X11R6/bin
PATH: /usr/pkg/bin
PATH: /usr/pkg/sbin
PATH: /usr/games
PATH: /usr/local/bin
PATH: /usr/local/sbin

## ----------- ##
## Core tests. ##
## ----------- ##

configure:1722: checking build system type
configure:1736: result: x86_64-unknown-netbsd5.1
configure:1781: checking for a BSD-compatible install
configure:1849: result: /usr/bin/install -c
configure:1860: checking whether build environment is sane
configure:1910: result: yes
configure:2051: checking for a thread-safe mkdir -p
configure:2090: result: lib/install-sh -c -d
configure:2103: checking for gawk
configure:2133: result: no
configure:2103: checking for mawk
configure:2133: result: no
configure:2103: checking for nawk
configure:2133: result: no
configure:2103: checking for awk
configure:2119: found /usr/bin/awk
configure:2130: result: awk
configure:2141: checking whether make sets $(MAKE)
configure:2163: result: yes
configure:2265: checking for perl
configure:2283: found /usr/pkg/bin/perl
configure:2295: result: /usr/pkg/bin/perl
configure:2314: checking whether /usr/pkg/bin/perl supports ithreads
configure:2337: result: yes
configure:2349: checking for tex
configure:2379: result: no
configure:2396: checking whether autoconf is installed
configure:2401: eval autoconf --version
autoconf (GNU Autoconf) 2.68
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+/Autoconf: GNU GPL version 3 or later
<http://gnu.org/licenses/gpl.html>, <http://gnu.org/licenses/exceptions.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by David J. MacKenzie and Akim Demaille.
configure:2404: $? = 0
configure:2412: result: yes
configure:2419: checking whether autoconf works
configure:2426: cd conftest && eval autoconf -o /dev/null conftest.ac
configure:2429: $? = 0
configure:2438: result: yes
configure:2445: checking whether autoconf is recent enough
configure:2452: cd conftest && eval autoconf -o /dev/null conftest.ac
configure:2455: $? = 0
configure:2464: result: yes
configure:2471: checking whether ln works
configure:2491: result: yes
configure:2506: checking for grep that handles long lines and -e
configure:2564: result: /usr/bin/grep
configure:2569: checking for egrep
configure:2631: result: /usr/bin/grep -E
configure:2636: checking for fgrep
configure:2698: result: /usr/bin/grep -F
configure:2704: checking whether /bin/sh has working 'set -e' with exit trap
configure:2717: result: yes
configure:2876: creating ./config.status

## ---------------------- ##
## Running config.status. ##
## ---------------------- ##

This file was extended by GNU Automake config.status 1.11.1, which was
generated by GNU Autoconf 2.65.  Invocation command line was

  CONFIG_FILES    = 
  CONFIG_HEADERS  = 
  CONFIG_LINKS    = 
  CONFIG_COMMANDS = 
  $ ./config.status 

on gcc70.fsffrance.org

config.status:776: creating Makefile
config.status:776: creating doc/Makefile
config.status:776: creating lib/Automake/Makefile
config.status:776: creating lib/Automake/tests/Makefile
config.status:776: creating lib/Makefile
config.status:776: creating lib/am/Makefile
config.status:776: creating m4/Makefile
config.status:776: creating tests/Makefile
config.status:776: creating tests/defs
config.status:776: creating tests/aclocal-1.11
config.status:776: creating tests/automake-1.11

## ---------------- ##
## Cache variables. ##
## ---------------- ##

ac_cv_build=x86_64-unknown-netbsd5.1
ac_cv_env_build_alias_set=
ac_cv_env_build_alias_value=
ac_cv_env_host_alias_set=
ac_cv_env_host_alias_value=
ac_cv_env_target_alias_set=
ac_cv_env_target_alias_value=
ac_cv_path_EGREP='/usr/bin/grep -E'
ac_cv_path_FGREP='/usr/bin/grep -F'
ac_cv_path_GREP=/usr/bin/grep
ac_cv_path_PERL=/usr/pkg/bin/perl
ac_cv_path_install='/usr/bin/install -c'
ac_cv_prog_AWK=awk
ac_cv_prog_make_make_set=yes
am_cv_autoconf_installed=yes
am_cv_autoconf_version=yes
am_cv_autoconf_works=yes
am_cv_prog_PERL_ithreads=yes
am_cv_prog_ln=ln
am_cv_sh_errexit_works=yes

## ----------------- ##
## Output variables. ##
## ----------------- ##

ACLOCAL='perllibdir="/tmp/automake-1.11.1/lib:./lib" "/tmp/automake-1.11.1/aclocal" --acdir=m4 -I m4'
AMTAR='${SHELL} /tmp/automake-1.11.1/lib/missing --run tar'
APIVERSION='1.11'
AUTOCONF='${SHELL} /tmp/automake-1.11.1/lib/missing --run autoconf'
AUTOHEADER='${SHELL} /tmp/automake-1.11.1/lib/missing --run autoheader'
AUTOMAKE='perllibdir="/tmp/automake-1.11.1/lib:./lib" "/tmp/automake-1.11.1/automake" --libdir=lib'
AWK='awk'
CYGPATH_W='echo'
DEFS='-DPACKAGE_NAME=\"GNU\ Automake\" -DPACKAGE_TARNAME=\"automake\" -DPACKAGE_VERSION=\"1.11.1\" -DPACKAGE_STRING=\"GNU\ Automake\ 1.11.1\" -DPACKAGE_BUGREPORT=\"[email-masked]\" -DPACKAGE_URL=\"http://www.gnu.org/software/automake/\" -DPACKAGE=\"automake\" -DVERSION=\"1.11.1\"'
ECHO_C=''
ECHO_N='-n'
ECHO_T=''
EGREP='/usr/bin/grep -E'
FGREP='/usr/bin/grep -F'
GREP='/usr/bin/grep'
HELP2MAN='${SHELL} /tmp/automake-1.11.1/lib/missing --run help2man'
INSTALL_DATA='${INSTALL} -m 644'
INSTALL_PROGRAM='${INSTALL}'
INSTALL_SCRIPT='${INSTALL}'
INSTALL_STRIP_PROGRAM='$(install_sh) -c -s'
LIBOBJS=''
LIBS=''
LN='ln'
LTLIBOBJS=''
MAKEINFO='${SHELL} /tmp/automake-1.11.1/lib/missing --run makeinfo'
MKDIR_P='lib/install-sh -c -d'
MODIFICATION_DELAY='2'
PACKAGE='automake'
PACKAGE_BUGREPORT=[email-masked]'
PACKAGE_NAME='GNU Automake'
PACKAGE_STRING='GNU Automake 1.11.1'
PACKAGE_TARNAME='automake'
PACKAGE_URL='http://www.gnu.org/software/automake/'
PACKAGE_VERSION='1.11.1'
PATH_SEPARATOR=':'
PERL='/usr/pkg/bin/perl'
PERL_THREADS='1'
SET_MAKE=''
SHELL='/bin/ksh'
STRIP=''
TEX=''
VERSION='1.11.1'
am_AUTOCONF='autoconf'
am_AUTOHEADER='autoheader'
am__isrc=''
am__leading_dot='.'
am__tar='${AMTAR} chof - "$$tardir"'
am__untar='${AMTAR} xf -'
bindir='${exec_prefix}/bin'
build='x86_64-unknown-netbsd5.1'
build_alias=''
build_cpu='x86_64'
build_os='netbsd5.1'
build_vendor='unknown'
datadir='${datarootdir}'
datarootdir='${prefix}/share'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
dvidir='${docdir}'
exec_prefix='${prefix}'
host_alias=''
htmldir='${docdir}'
includedir='${prefix}/include'
infodir='${datarootdir}/info'
install_sh='${SHELL} /tmp/automake-1.11.1/lib/install-sh'
libdir='${exec_prefix}/lib'
libexecdir='${exec_prefix}/libexec'
localedir='${datarootdir}/locale'
localstatedir='${prefix}/var'
mandir='${datarootdir}/man'
mkdir_p='$(top_builddir)/lib/install-sh -c -d'
oldincludedir='/usr/include'
pdfdir='${docdir}'
pkgvdatadir='${datadir}/automake-1.11'
prefix='/usr/local'
program_transform_name='s,x,x,'
psdir='${docdir}'
sbindir='${exec_prefix}/sbin'
sh_errexit_works='yes'
sharedstatedir='${prefix}/com'
sysconfdir='${prefix}/etc'
target_alias=''

## ----------- ##
## confdefs.h. ##
## ----------- ##

/* confdefs.h */
#define PACKAGE_NAME "GNU Automake"
#define PACKAGE_TARNAME "automake"
#define PACKAGE_VERSION "1.11.1"
#define PACKAGE_STRING "GNU Automake 1.11.1"
#define PACKAGE_BUGREPORT "[email-masked]"
#define PACKAGE_URL "http://www.gnu.org/software/automake/"
#define PACKAGE "automake"
#define VERSION "1.11.1"

configure: exit 0