* Ouch: found a bug where re-exec from changed makefiles turned off
  jobserver :(.
diff --git a/ChangeLog b/ChangeLog
index 9a02343..e3b3166 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
 
 	* Version 3.78 released.
@@ -764,9 +775,9 @@
 	a bit saying whether we've seen this target in this pass or not.
 	(update_goal_chain): Initially set the global considered toggle to
 	1, since all targets initialize their boolean to 0.  At the end of
-	each pass, toggle the global considered variable.  * filedef.h
-	(struct file): Per-file considered toggle bit.  * file.c: New
-	global toggle variable considered.
+	each pass, toggle the global considered variable.
+	* filedef.h (struct file): Per-file considered toggle bit.
+	* file.c: New global toggle variable considered.
 
 1999-04-05  Paul D. Smith  <psmith@gnu.org>
 
diff --git a/configure.in b/configure.in
index 2768653..6cb935f 100644
--- a/configure.in
+++ b/configure.in
@@ -3,7 +3,7 @@
 AC_PREREQ(2.13)dnl		dnl Minimum Autoconf version required.
 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)
 
 dnl Regular configure stuff
diff --git a/main.c b/main.c
index ec92f01..4065265 100644
--- a/main.c
+++ b/main.c
@@ -1700,12 +1700,7 @@
 	  fflush (stdout);
 	  fflush (stderr);
 
-          /* Close the jobserver pipes if we opened any.  */
-          if (job_fds[0] >= 0)
-            {
-              close (job_fds[0]);
-              close (job_fds[1]);
-            }
+          /* Close the dup'd jobserver pipe if we opened one.  */
           if (job_rfd >= 0)
             close (job_rfd);
 
diff --git a/make.texinfo b/make.texinfo
index 8334526..fb15117 100644
--- a/make.texinfo
+++ b/make.texinfo
@@ -8,10 +8,10 @@
 @c FSF publishers: format makebook.texi instead of using this file directly.
 
 @set RCSID $Id$
-@set EDITION 0.53
-@set VERSION 3.78
-@set UPDATED 14 April 1999
-@set UPDATE-MONTH April 1999
+@set EDITION 0.54
+@set VERSION 3.78.1
+@set UPDATED 09 September 1999
+@set UPDATE-MONTH September 1999
 @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
 
diff --git a/tests/ChangeLog b/tests/ChangeLog
index b40612f..f8f6700 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -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>
 
 	* scripts/features/reinvoke: Remove invocations of "touch" in
diff --git a/tests/scripts/features/parallelism b/tests/scripts/features/parallelism
index 323eb5c..cd75392 100644
--- a/tests/scripts/features/parallelism
+++ b/tests/scripts/features/parallelism
@@ -3,7 +3,7 @@
 $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
 intended to run in series.  The second and third have just an
 echo statement.  When make is called in this test, it is given
@@ -29,48 +29,72 @@
 open(MAKEFILE,"> $makefile");
 
 print MAKEFILE <<"EOF";
-all : def_1 def_5 def_6
-def_1 :
-\t\@$sleep_command 3 ; echo ONE
-\t\@echo TWO
-\t\@$sleep_command 1 ; echo THREE
-\t\@echo FOUR
-def_5 :
-\t\@echo FIVE
-def_6 :
-\t\@$sleep_command 1 ; echo SIX
-
+all : def_1 def_2 def_3
+def_1 : ; \@echo ONE; $sleep_command 3 ; echo TWO
+def_2 : ; \@$sleep_command 2 ; echo THREE
+def_3 : ; \@$sleep_command 1 ; echo FOUR
 EOF
 
 close(MAKEFILE);
 
 &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));
 
 
-# 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;
 
 open(MAKEFILE,"> $makefile2");
 
-print MAKEFILE <<'EOF';
-all: 1 2 3; @echo success
+print MAKEFILE <<"EOF";
+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" > $@
-2.inc: ; @sleep 2; echo 2; echo "2: ; @echo $@ has been included" > $@
-3.inc: ; @echo 3; echo "3: ; @sleep 1; 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_command 1; echo THREE.inc; echo "2: ; \@$sleep_command 1; echo THREE" > \$\@
 EOF
 
 close(MAKEFILE);
 
 &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));
 
-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;