* Ouch: found a bug where re-exec from changed makefiles turned off

jobserver :(.
This commit is contained in:
Paul Smith 1999-09-23 18:23:33 +00:00
parent c828aeaa98
commit dbb8f3e30b
6 changed files with 73 additions and 36 deletions

View file

@ -1,3 +1,14 @@
1999-09-23 Paul D. Smith <psmith@gnu.org>
* Version 3.78.1 released.
* make.texinfo: Update version/date stamp.
* main.c (main): Argh. For some reason we were closing _all_ the
jobserver pipes before we re-exec'd due to changed makefiles.
This means that any re-exec got a "jobserver unavailable" error :-/.
I can't believe we didn't notice this before.
1999-09-22 Paul D. Smith <psmith@gnu.org> 1999-09-22 Paul D. Smith <psmith@gnu.org>
* Version 3.78 released. * Version 3.78 released.
@ -764,9 +775,9 @@
a bit saying whether we've seen this target in this pass or not. a bit saying whether we've seen this target in this pass or not.
(update_goal_chain): Initially set the global considered toggle to (update_goal_chain): Initially set the global considered toggle to
1, since all targets initialize their boolean to 0. At the end of 1, since all targets initialize their boolean to 0. At the end of
each pass, toggle the global considered variable. * filedef.h each pass, toggle the global considered variable.
(struct file): Per-file considered toggle bit. * file.c: New * filedef.h (struct file): Per-file considered toggle bit.
global toggle variable considered. * file.c: New global toggle variable considered.
1999-04-05 Paul D. Smith <psmith@gnu.org> 1999-04-05 Paul D. Smith <psmith@gnu.org>

View file

@ -3,7 +3,7 @@ AC_REVISION([$Id$])
AC_PREREQ(2.13)dnl dnl Minimum Autoconf version required. AC_PREREQ(2.13)dnl dnl Minimum Autoconf version required.
AC_INIT(vpath.c)dnl dnl A distinctive file to look for in srcdir. AC_INIT(vpath.c)dnl dnl A distinctive file to look for in srcdir.
AM_INIT_AUTOMAKE(make, 3.78) AM_INIT_AUTOMAKE(make, 3.78.1)
AM_CONFIG_HEADER(config.h) AM_CONFIG_HEADER(config.h)
dnl Regular configure stuff dnl Regular configure stuff

7
main.c
View file

@ -1700,12 +1700,7 @@ int main (int argc, char ** argv)
fflush (stdout); fflush (stdout);
fflush (stderr); fflush (stderr);
/* Close the jobserver pipes if we opened any. */ /* Close the dup'd jobserver pipe if we opened one. */
if (job_fds[0] >= 0)
{
close (job_fds[0]);
close (job_fds[1]);
}
if (job_rfd >= 0) if (job_rfd >= 0)
close (job_rfd); close (job_rfd);

View file

@ -8,10 +8,10 @@
@c FSF publishers: format makebook.texi instead of using this file directly. @c FSF publishers: format makebook.texi instead of using this file directly.
@set RCSID $Id$ @set RCSID $Id$
@set EDITION 0.53 @set EDITION 0.54
@set VERSION 3.78 @set VERSION 3.78.1
@set UPDATED 14 April 1999 @set UPDATED 09 September 1999
@set UPDATE-MONTH April 1999 @set UPDATE-MONTH September 1999
@comment The ISBN number might need to change on next publication. @comment The ISBN number might need to change on next publication.
@set ISBN 1-882114-80-9 @c CHANGE THIS BEFORE PRINTING AGAIN! --psmith 16jul98 @set ISBN 1-882114-80-9 @c CHANGE THIS BEFORE PRINTING AGAIN! --psmith 16jul98

View file

@ -1,3 +1,10 @@
1999-09-23 Paul D. Smith <psmith@gnu.org>
* scripts/features/parallelism: Add a check to ensure that the
jobserver works when we re-invoke. Also cleaned up the tests a
little, reducing the number of rules we use so the test won't need
as many "sleep" commands.
1999-09-16 Paul D. Smith <psmith@gnu.org> 1999-09-16 Paul D. Smith <psmith@gnu.org>
* scripts/features/reinvoke: Remove invocations of "touch" in * scripts/features/reinvoke: Remove invocations of "touch" in

View file

@ -3,7 +3,7 @@
$description = "Test parallelism (-j) option."; $description = "Test parallelism (-j) option.";
$details = "This test creates a makefile with three double-colon default $details = "This test creates a makefile with two double-colon default
rules. The first rule has a series of sleep and echo commands rules. The first rule has a series of sleep and echo commands
intended to run in series. The second and third have just an intended to run in series. The second and third have just an
echo statement. When make is called in this test, it is given echo statement. When make is called in this test, it is given
@ -29,48 +29,72 @@ else {
open(MAKEFILE,"> $makefile"); open(MAKEFILE,"> $makefile");
print MAKEFILE <<"EOF"; print MAKEFILE <<"EOF";
all : def_1 def_5 def_6 all : def_1 def_2 def_3
def_1 : def_1 : ; \@echo ONE; $sleep_command 3 ; echo TWO
\t\@$sleep_command 3 ; echo ONE def_2 : ; \@$sleep_command 2 ; echo THREE
\t\@echo TWO def_3 : ; \@$sleep_command 1 ; echo FOUR
\t\@$sleep_command 1 ; echo THREE
\t\@echo FOUR
def_5 :
\t\@echo FIVE
def_6 :
\t\@$sleep_command 1 ; echo SIX
EOF EOF
close(MAKEFILE); close(MAKEFILE);
&run_make_with_options($makefile, "-j 4", &get_logfile); &run_make_with_options($makefile, "-j 4", &get_logfile);
$answer = "FIVE\nSIX\nONE\nTWO\nTHREE\nFOUR\n"; $answer = "ONE\nFOUR\nTHREE\nTWO\n";
&compare_output($answer, &get_logfile(1)); &compare_output($answer, &get_logfile(1));
# Test parallelism with included files # Test parallelism with included files. Here we sleep/echo while
# building the included files, to test that they are being built in
# parallel.
$makefile2 = &get_tmpfile; $makefile2 = &get_tmpfile;
open(MAKEFILE,"> $makefile2"); open(MAKEFILE,"> $makefile2");
print MAKEFILE <<'EOF'; print MAKEFILE <<"EOF";
all: 1 2 3; @echo success all: 1 2; \@echo success
-include 1.inc 2.inc 3.inc -include 1.inc 2.inc
1.inc: ; @sleep 1; echo 1; echo "1: ; @sleep 2; echo $@ has been included" > $@ 1.inc: ; \@echo ONE.inc; $sleep_command 2; echo TWO.inc; echo "1: ; \@echo ONE; $sleep_command 2; echo TWO" > \$\@
2.inc: ; @sleep 2; echo 2; echo "2: ; @echo $@ has been included" > $@ 2.inc: ; \@$sleep_command 1; echo THREE.inc; echo "2: ; \@$sleep_command 1; echo THREE" > \$\@
3.inc: ; @echo 3; echo "3: ; @sleep 1; echo $@ has been included" > $@
EOF EOF
close(MAKEFILE); close(MAKEFILE);
&run_make_with_options("$makefile2", "-j 4", &get_logfile); &run_make_with_options("$makefile2", "-j 4", &get_logfile);
$answer = "3\n1\n2\n2.inc has been included\n3.inc has been included\n1.inc has been included\nsuccess\n"; $answer = "ONE.inc\nTHREE.inc\nTWO.inc\nONE\nTHREE\nTWO\nsuccess\n";
&compare_output($answer, &get_logfile(1)); &compare_output($answer, &get_logfile(1));
unlink('1.inc', '2.inc', '3.inc'); unlink('1.inc', '2.inc');
# Test parallelism with included files--this time recurse first and make
# sure the jobserver works.
$makefile3 = &get_tmpfile;
open(MAKEFILE,"> $makefile3");
print MAKEFILE <<"EOF";
recurse: ; \@\$(MAKE) --no-print-directory -f $makefile3 INC=yes all
all: 1 2; \@echo success
INC = no
ifeq (\$(INC),yes)
-include 1.inc 2.inc
endif
1.inc: ; \@echo ONE.inc; $sleep_command 2; echo TWO.inc; echo "1: ; \@echo ONE; $sleep_command 2; echo TWO" > \$\@
2.inc: ; \@$sleep_command 1; echo THREE.inc; echo "2: ; \@$sleep_command 1; echo THREE" > \$\@
EOF
close(MAKEFILE);
&run_make_with_options("$makefile3", "-j 4", &get_logfile);
$answer = "ONE.inc\nTHREE.inc\nTWO.inc\nONE\nTHREE\nTWO\nsuccess\n";
&compare_output($answer, &get_logfile(1));
unlink('1.inc', '2.inc');
1; 1;