Move up waitpid error check so that errno isn't clobbered by tcsetpgrp.
diff --git a/hush.c b/hush.c
index 4a16a3f..a7316f8 100644
--- a/hush.c
+++ b/hush.c
@@ -1148,12 +1148,12 @@
 		}
 	}
 
+	if (childpid == -1 && errno != ECHILD)
+		perror_msg("waitpid");
+
 	/* move the shell to the foreground */
 	if (tcsetpgrp(0, getpgrp()) && errno != ENOTTY)
 		perror_msg("tcsetpgrp"); 
-
-	if (childpid == -1 && errno != ECHILD)
-		perror_msg("waitpid");
 }
 
 /* run_pipe_real() starts all the jobs, but doesn't wait for anything
diff --git a/shell/hush.c b/shell/hush.c
index 4a16a3f..a7316f8 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -1148,12 +1148,12 @@
 		}
 	}
 
+	if (childpid == -1 && errno != ECHILD)
+		perror_msg("waitpid");
+
 	/* move the shell to the foreground */
 	if (tcsetpgrp(0, getpgrp()) && errno != ENOTTY)
 		perror_msg("tcsetpgrp"); 
-
-	if (childpid == -1 && errno != ECHILD)
-		perror_msg("waitpid");
 }
 
 /* run_pipe_real() starts all the jobs, but doesn't wait for anything