summaryrefslogtreecommitdiff
path: root/lib/tap-driver.sh
diff options
context:
space:
mode:
authorStefano Lattarini <stefano.lattarini@gmail.com>2011-09-28 20:48:13 +0200
committerStefano Lattarini <stefano.lattarini@gmail.com>2011-09-28 20:48:13 +0200
commit5014b1c294a4b8982ab3c7c78e2272fdcdff468d (patch)
treea53a4341d84594a8166b0cca226f962e0a73e308 /lib/tap-driver.sh
parentc481ac95102bf739e7c95e0ec23a40b24bee7017 (diff)
downloadautomake-5014b1c294a4b8982ab3c7c78e2272fdcdff468d.tar.gz
tap/awk: improve comments about Korn shell signal handling issues
* lib/tap-driver.sh: Link an Austin Group discussion about how shells are allowed, and even encouraged, to set the special variable `$?' to values greater than 256 to report termination of a child by a signal. Improve and extend comments about our workarounds for unusual korn shell signals' propagation. Thanks to Eric Blake for the pointers.
Diffstat (limited to 'lib/tap-driver.sh')
-rwxr-xr-xlib/tap-driver.sh18
1 files changed, 11 insertions, 7 deletions
diff --git a/lib/tap-driver.sh b/lib/tap-driver.sh
index e9f103755..c911991c1 100755
--- a/lib/tap-driver.sh
+++ b/lib/tap-driver.sh
@@ -117,14 +117,17 @@ fi
{
(
- # Ignore common signals (in this subshell only!) to avoid potential
+ # Ignore common signals (in this subshell only!), to avoid potential
# problems with Korn shells. Some Korn shells are known to propagate
# to themselves signals that have killed a child process they were
- # waiting for (this is done at least for SIGINT -- and usually only
- # for it in truth); this would cause a premature exit in this subshell,
- # so that the awk script would never seen the exit status it expects
- # on its last input line (and which is displayed below by the last
- # `echo $?' command), and would thus die reporting an internal error.
+ # waiting for; this is done at least for SIGINT (and usually only for
+ # it, in truth). Without the `trap' below, such a behaviour could
+ # cause a premature exit in the current subshell, e.g., in case the
+ # test command it runs gets terminated by a SIGINT. Thus, the awk
+ # script we are piping into would never seen the exit status it
+ # expects on its last input line (which is displayed below by the
+ # last `echo $?' statement), and would thus die reporting an internal
+ # error.
# For more information, see the Autoconf manual and the threads:
# <http://lists.gnu.org/archive/html/bug-autoconf/2011-09/msg00004.html>
# <http://mail.opensolaris.org/pipermail/ksh93-integration-discuss/2009-February/004121.html>
@@ -458,7 +461,8 @@ function get_test_exit_message(status)
# shells, when a child process die due to signal number n, can leave
# in $? an exit status of 256+n instead of the more standard 128+n.
# Apparently, both behaviours are allowed by POSIX (2008), so be
- # prepared to handle them both.
+ # prepared to handle them both. See also Austing Group report ID
+ # 0000051 <http://www.austingroupbugs.net/view.php?id=51>
exit_details = sprintf(" (terminated by signal %d?)", status - 256)
else
# Never seen in practice.