From: Matt Caswell Date: Wed, 15 Mar 2017 00:54:04 +0000 (+0000) Subject: Fix a hang in tests that use sessionfile X-Git-Tag: OpenSSL_1_1_1-pre1~2031 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=db0e0abb88b6bd5bfa5637ee84e59dcb5a232008;p=oweals%2Fopenssl.git Fix a hang in tests that use sessionfile The logic for testing whether the sessionfile has been created or not was faulty and could result in race conditions. If you "lose" the tests hang waiting for a session file that's never going to arrive. Fixes #2950 Reviewed-by: Rich Salz (Merged from https://github.com/openssl/openssl/pull/2955) --- diff --git a/util/TLSProxy/Proxy.pm b/util/TLSProxy/Proxy.pm index 189bcb8b57..aaef753cd6 100644 --- a/util/TLSProxy/Proxy.pm +++ b/util/TLSProxy/Proxy.pm @@ -284,32 +284,30 @@ sub clientstart #Wait for either the server socket or the client socket to become readable my @ready; - while(!(TLSProxy::Message->end) && (@ready = $sel->can_read)) { + my $ctr = 0; + while( (!(TLSProxy::Message->end) + || (defined $self->sessionfile() + && (-s $self->sessionfile()) == 0)) + && $ctr < 10 + && (@ready = $sel->can_read(1))) { foreach my $hand (@ready) { if ($hand == $server_sock) { $server_sock->sysread($indata, 16384) or goto END; $indata = $self->process_packet(1, $indata); $client_sock->syswrite($indata); + $ctr = 0; } elsif ($hand == $client_sock) { $client_sock->sysread($indata, 16384) or goto END; $indata = $self->process_packet(0, $indata); $server_sock->syswrite($indata); + $ctr = 0; } else { - print "Err\n"; - goto END; + $ctr++ } } } - for (my $ctr = 0; - defined $self->sessionfile() - && (!(-f $self->sessionfile()) || $ctr == 3); - $ctr++) { - sleep 1; - } - - die "Session file not created" - if (defined $self->sessionfile() && !(-f $self->sessionfile())); + die "No progress made" if $ctr >= 10; END: print "Connection closed\n";