[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Autotest: do not define fds early (was: parallel autotest [2/3]: Impleme
From: |
Ralf Wildenhues |
Subject: |
Autotest: do not define fds early (was: parallel autotest [2/3]: Implement 'testsuite --jobs'.) |
Date: |
Tue, 7 Oct 2008 22:22:35 +0200 |
User-agent: |
Mutt/1.5.18 (2008-05-17) |
* Ralf Wildenhues wrote on Mon, Sep 29, 2008 at 11:35:39PM CEST:
> at_optname=`echo " $at_option" | sed 's/^ //; s/[[0-9=]].*//'`
> AS_ERROR([non-numeric argument to $at_optname: $at_jobs]) ;;
>
> I just found another issue, though: AS_ERROR wants to write to fd 5,
> which is opened only much later. Since this concerns a number of
> different places, too, I consider it an independent issue, to be fixed
> separately.
My bug, introduced by the [1/3] patch. ea2e96c4 moved the definition of
AS_MESSAGE_LOG_FD early in the file, which caused all following AS_ERROR
calls to use it. (The move was originally done for the [3/3] patch.)
Testing is a bit awkward, as some shells (like bash) issue warnings
about closed fds only interactively:
$ ./testsuite foo%=3
./testsuite: line 1193: 5: Bad file descriptor
testsuite: error: invalid variable name: foo%
However, I definitely need a reminder test when I forget about this
again in the future. So, OK to apply?
Thanks, and sorry again,
Ralf
Do not write to testsuite log fd before initialization.
* lib/autotest/general.m4 (AS_MESSAGE_LOG_FD, AT_JOB_FIFO_FD):
Define fds only when initializing the log fd so early error
messages do not try to write to it.
* tests/autotest.at (Startup error messages): New test.
* NEWS: Document this 2.63 regression.
diff --git a/NEWS b/NEWS
index e86887a..94d890f 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,9 @@ GNU Autoconf NEWS - User visible changes.
** Autotest testsuites accept an option --jobs[=N] for parallel testing.
+** Autotest testsuites do not attempt to write startup error messages
+ to the log file before that is opened (regression introduced in 2.63).
+
** The following m4sugar macros are new:
m4_default_quoted
diff --git a/lib/autotest/general.m4 b/lib/autotest/general.m4
index f1966ce..d19f9d9 100644
--- a/lib/autotest/general.m4
+++ b/lib/autotest/general.m4
@@ -215,9 +215,6 @@ m4_define([AT_groups_all], [])
m4_define([AT_help_all], [])
m4_foreach([AT_name], [_AT_DEFINE_INIT_LIST], [m4_popdef(m4_defn([AT_name]))])
m4_wrap([_AT_FINISH])
-dnl Define FDs.
-m4_define([AS_MESSAGE_LOG_FD], [5])
-m4_define([AT_JOB_FIFO_FD], [6])
AS_INIT[]dnl
m4_divert_push([DEFAULTS])dnl
AT_COPYRIGHT(
@@ -892,8 +889,9 @@ PATH=$at_new_path
export PATH
# Setting up the FDs.
-# 5 is the log file. Not to be overwritten if `-d'.
-dnl FDs are defined earlier in this file.
+m4_define([AS_MESSAGE_LOG_FD], [5])
+m4_define([AT_JOB_FIFO_FD], [6])
+[#] AS_MESSAGE_LOG_FD is the log file. Not to be overwritten if `-d'.
if $at_debug_p; then
at_suite_log=/dev/null
else
diff --git a/tests/autotest.at b/tests/autotest.at
index 3547ee4..4361d07 100644
--- a/tests/autotest.at
+++ b/tests/autotest.at
@@ -216,6 +216,14 @@ AT_TESTED([autoconf])
autom4te --version
]])])
+AT_CHECK_AT([Startup error messages],
+[[AT_INIT([[suite]])
+AT_SETUP([only test])
+AT_CHECK([:])
+AT_CLEANUP
+]], [], [], [], [],
+[AT_CHECK([sed -n '/exec AS_MESSAGE_LOG_FD/q; />&AS_MESSAGE_LOG_FD/p' <
micro-suite])])
+
## ----------------------------------------------------- ##
## Newlines and command substitutions in test commands. ##
## ----------------------------------------------------- ##
- Autotest: do not define fds early (was: parallel autotest [2/3]: Implement 'testsuite --jobs'.),
Ralf Wildenhues <=