autoconf-patches
[Top][All Lists]
Advanced

[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.  ##
 ## ----------------------------------------------------- ##




reply via email to

[Prev in Thread] Current Thread [Next in Thread]