The branch master has been updated
       via  db0e0abb88b6bd5bfa5637ee84e59dcb5a232008 (commit)
      from  3a80bd29be74b50771dd20e15282db693dbe9522 (commit)


- Log -----------------------------------------------------------------
commit db0e0abb88b6bd5bfa5637ee84e59dcb5a232008
Author: Matt Caswell <m...@openssl.org>
Date:   Wed Mar 15 00:54:04 2017 +0000

    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 <rs...@openssl.org>
    (Merged from https://github.com/openssl/openssl/pull/2955)

-----------------------------------------------------------------------

Summary of changes:
 util/TLSProxy/Proxy.pm | 22 ++++++++++------------
 1 file changed, 10 insertions(+), 12 deletions(-)

diff --git a/util/TLSProxy/Proxy.pm b/util/TLSProxy/Proxy.pm
index 189bcb8..aaef753 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";
_____
openssl-commits mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-commits

Reply via email to