The branch master has been updated via b4c1950d8914775db503d8ab931735325032a40d (commit) via 6b3e8b94301d1081e88d276eeb452668c8f13632 (commit) from 362ff3c39703633ac53ba9130c7acc02177bedc5 (commit)
- Log ----------------------------------------------------------------- commit b4c1950d8914775db503d8ab931735325032a40d Author: Andy Polyakov <ap...@openssl.org> Date: Wed Apr 11 14:56:37 2018 +0200 TLSProxy/Proxy.pm: handle "impossible" failure to connect to s_server. The failure is "impossible", because we have confirmation that s_server listens, yet Mac OS X fails to connect. This avoids 10 minutes timeout on Travis CI. Reviewed-by: Bernd Edlinger <bernd.edlin...@hotmail.de> Reviewed-by: Rich Salz <rs...@openssl.org> (Merged from https://github.com/openssl/openssl/pull/5907) commit 6b3e8b94301d1081e88d276eeb452668c8f13632 Author: Andy Polyakov <ap...@openssl.org> Date: Sun Apr 8 14:44:59 2018 +0200 TLSProxy/Proxy.pm: handle -1 as return value from waitpid. On rare occasion 's_server | perl -ne print' can complete before corresponding waitpid, which on Windows can results in -1 return value. This is not an error, don't treat it like one. Collect even return value from s_server. Reviewed-by: Bernd Edlinger <bernd.edlin...@hotmail.de> Reviewed-by: Rich Salz <rs...@openssl.org> (Merged from https://github.com/openssl/openssl/pull/5907) ----------------------------------------------------------------------- Summary of changes: util/perl/TLSProxy/Proxy.pm | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/util/perl/TLSProxy/Proxy.pm b/util/perl/TLSProxy/Proxy.pm index b3b2fec..45d88bf 100644 --- a/util/perl/TLSProxy/Proxy.pm +++ b/util/perl/TLSProxy/Proxy.pm @@ -189,10 +189,16 @@ sub connect_to_server $servaddr =~ s/[\[\]]//g; # Remove [ and ] - $self->{server_sock} = $IP_factory->(PeerAddr => $servaddr, - PeerPort => $self->{server_port}, - Proto => 'tcp') - or die "unable to connect: $!\n"; + my $sock = $IP_factory->(PeerAddr => $servaddr, + PeerPort => $self->{server_port}, + Proto => 'tcp'); + if (!defined($sock)) { + my $err = $!; + kill(3, $self->{real_serverpid}); + die "unable to connect: $err\n"; + } + + $self->{server_sock} = $sock; } sub start @@ -243,7 +249,8 @@ sub start if ($self->{server_port} == 0) { # This actually means that s_server exited, because otherwise # we would still searching for ACCEPT... - die "no ACCEPT detected in '$execcmd' output\n"; + waitpid($pid, 0); + die "no ACCEPT detected in '$execcmd' output: $?\n"; } # Just make sure everything else is simply printed [as separate lines]. @@ -255,6 +262,7 @@ sub start if (eval { require Win32::Process; 1; }) { if (Win32::Process::Create(my $h, $^X, "perl -ne print", 0, 0, ".")) { $pid = $h->GetProcessID(); + $self->{proc_handle} = $h; # hold handle till next round [or exit] } else { $error = Win32::FormatMessage(Win32::GetLastError()); } @@ -412,11 +420,19 @@ sub clientstart my $pid; if (--$self->{serverconnects} == 0) { $pid = $self->{serverpid}; - die "serverpid is zero\n" if $pid == 0; - print "Waiting for server process to close: $pid...\n"; - # recall that we wait on process that buffers server's output + print "Waiting for 'perl -ne print' process to close: $pid...\n"; + $pid = waitpid($pid, 0); + if ($pid > 0) { + die "exit code $? from 'perl -ne print' process\n" if $? != 0; + } elsif ($pid == 0) { + kill(3, $self->{real_serverpid}); + die "lost control over $self->{serverpid}?"; + } + $pid = $self->{real_serverpid}; + print "Waiting for s_server process to close: $pid...\n"; + # it's done already, just collect the exit code [and reap]... waitpid($pid, 0); - die "exit code $? from server process\n" if $? != 0; + die "exit code $? from s_server process\n" if $? != 0; } else { # It's a bit counter-intuitive spot to make next connection to # the s_server. Rationale is that established connection works @@ -425,7 +441,6 @@ sub clientstart $self->connect_to_server(); } $pid = $self->{clientpid}; - die "clientpid is zero\n" if $pid == 0; print "Waiting for client process to close: $pid...\n"; waitpid($pid, 0); _____ openssl-commits mailing list To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-commits