From: Marc Hoersken Date: Tue, 17 Aug 2021 19:16:41 +0000 (+0200) Subject: tests/*server.pl: flush output before executing subprocess X-Git-Tag: curl-7_79_0~91 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5b1c2dd1db6465f4664becc9a8b686e4151fae68;p=thirdparty%2Fcurl.git tests/*server.pl: flush output before executing subprocess Also avoid shell processes staying around by using exec. This is necessary to avoid output data being buffering inside the process chain of Perl, Bash/Shell and our test server binaries. On non-Windows systems the exec will also make the subprocess replace the intermediate shell, but on Windows it will at least bind the processes together since there is no real fork or exec available. See: https://cygwin.com/cygwin-ug-net/highlights.html and: https://docs.microsoft.com/cpp/c-runtime-library/exec-wexec-functions Ref: https://github.com/curl/curl/pull/7530#issuecomment-900949010 Reviewed-by: Daniel Stenberg Reviewed-by: Jay Satiro Closes #7530 --- diff --git a/tests/httpserver.pl b/tests/httpserver.pl index fbdb6752cd..9c50e02d59 100755 --- a/tests/httpserver.pl +++ b/tests/httpserver.pl @@ -152,4 +152,5 @@ if($verbose) { print STDERR "RUN: server/sws".exe_ext('SRV')." $flags\n"; } -exec("server/sws".exe_ext('SRV')." $flags"); +$| = 1; +exec("exec server/sws".exe_ext('SRV')." $flags"); diff --git a/tests/rtspserver.pl b/tests/rtspserver.pl index bb4bef40d0..471bcbd5e6 100755 --- a/tests/rtspserver.pl +++ b/tests/rtspserver.pl @@ -119,4 +119,5 @@ $flags .= "--pidfile \"$pidfile\" ". "--logfile \"$logfile\" "; $flags .= "--ipv$ipvnum --port $port --srcdir \"$srcdir\""; -exec("server/rtspd".exe_ext('SRV')." $flags"); +$| = 1; +exec("exec server/rtspd".exe_ext('SRV')." $flags"); diff --git a/tests/runtests.pl b/tests/runtests.pl index 30ae0b3498..577f23467e 100755 --- a/tests/runtests.pl +++ b/tests/runtests.pl @@ -496,6 +496,9 @@ sub startnew { if(0 == $child) { # Here we are the child. Run the given command. + # Flush output. + $| = 1; + # Put an "exec" in front of the command so that the child process # keeps this child's process ID. exec("exec $cmd") || die "Can't exec() $cmd: $!"; @@ -4108,6 +4111,9 @@ sub singletest { close(GDBCMD); } + # Flush output. + $| = 1; + # timestamp starting of test command $timetoolini{$testnum} = Time::HiRes::time(); diff --git a/tests/secureserver.pl b/tests/secureserver.pl index be1de05663..fb1c4df82b 100755 --- a/tests/secureserver.pl +++ b/tests/secureserver.pl @@ -341,6 +341,9 @@ if($tstunnel_windows) { close(OUT); } + # Flush output. + $| = 1; + # Put an "exec" in front of the command so that the child process # keeps this child's process ID by being tied to the spawned shell. exec("exec $cmd") || die "Can't exec() $cmd: $!"; diff --git a/tests/sshserver.pl b/tests/sshserver.pl index 9441939077..90281eb400 100644 --- a/tests/sshserver.pl +++ b/tests/sshserver.pl @@ -1122,6 +1122,9 @@ if ($sshdid =~ /OpenSSH-Windows/) { close(OUT); } + # Flush output. + $| = 1; + # Put an "exec" in front of the command so that the child process # keeps this child's process ID by being tied to the spawned shell. exec("exec $cmd") || die "Can't exec() $cmd: $!"; diff --git a/tests/tftpserver.pl b/tests/tftpserver.pl index f9fbbe9bc6..d582b5fb68 100755 --- a/tests/tftpserver.pl +++ b/tests/tftpserver.pl @@ -120,4 +120,5 @@ $flags .= "--pidfile \"$pidfile\" ". "--logfile \"$logfile\" "; $flags .= "--ipv$ipvnum --port $port --srcdir \"$srcdir\""; -exec("server/tftpd".exe_ext('SRV')." $flags"); +$| = 1; +exec("exec server/tftpd".exe_ext('SRV')." $flags");