Index: net/third_party/nss/ssl/ssl3gthr.c |
diff --git a/net/third_party/nss/ssl/ssl3gthr.c b/net/third_party/nss/ssl/ssl3gthr.c |
index bdd2958414da3517c63d1d7d5b8e15c2689c1e8c..28fe1547c8b3470830255ba4b54919ac36ebc779 100644 |
--- a/net/third_party/nss/ssl/ssl3gthr.c |
+++ b/net/third_party/nss/ssl/ssl3gthr.c |
@@ -188,6 +188,7 @@ ssl3_GatherCompleteHandshake(sslSocket *ss, int flags) |
{ |
SSL3Ciphertext cText; |
int rv; |
+ PRBool canFalseStart = PR_FALSE; |
PORT_Assert( ss->opt.noLocks || ssl_HaveRecvBufLock(ss) ); |
do { |
@@ -207,7 +208,17 @@ ssl3_GatherCompleteHandshake(sslSocket *ss, int flags) |
if (rv < 0) { |
return ss->recvdCloseNotify ? 0 : rv; |
} |
- } while (ss->ssl3.hs.ws != idle_handshake && ss->gs.buf.len == 0); |
+ |
+ if (ss->opt.enableFalseStart) { |
+ ssl_GetSSL3HandshakeLock(ss); |
+ canFalseStart = (ss->ssl3.hs.ws == wait_change_cipher || |
+ ss->ssl3.hs.ws == wait_new_session_ticket) && |
+ ssl3_CanFalseStart(ss); |
+ ssl_ReleaseSSL3HandshakeLock(ss); |
+ } |
+ } while (ss->ssl3.hs.ws != idle_handshake && |
+ !canFalseStart && |
+ ss->gs.buf.len == 0); |
ss->gs.readOffset = 0; |
ss->gs.writeOffset = ss->gs.buf.len; |