| Index: net/third_party/nss/ssl/sslsock.c
|
| ===================================================================
|
| --- net/third_party/nss/ssl/sslsock.c (revision 227672)
|
| +++ net/third_party/nss/ssl/sslsock.c (working copy)
|
| @@ -366,6 +366,8 @@
|
| ss->badCertArg = os->badCertArg;
|
| ss->handshakeCallback = os->handshakeCallback;
|
| ss->handshakeCallbackData = os->handshakeCallbackData;
|
| + ss->canFalseStartCallback = os->canFalseStartCallback;
|
| + ss->canFalseStartCallbackData = os->canFalseStartCallbackData;
|
| ss->pkcs11PinArg = os->pkcs11PinArg;
|
| ss->getChannelID = os->getChannelID;
|
| ss->getChannelIDArg = os->getChannelIDArg;
|
| @@ -2457,10 +2459,14 @@
|
| } else if (new_flags & PR_POLL_WRITE) {
|
| /* The caller is trying to write, but the handshake is
|
| ** blocked waiting for data to read, and the first
|
| - ** handshake has been sent. so do NOT to poll on write.
|
| + ** handshake has been sent. So do NOT to poll on write
|
| + ** unless we did false start.
|
| */
|
| - new_flags ^= PR_POLL_WRITE; /* don't select on write. */
|
| - new_flags |= PR_POLL_READ; /* do select on read. */
|
| + if (!(ss->version >= SSL_LIBRARY_VERSION_3_0 &&
|
| + ss->ssl3.hs.canFalseStart)) {
|
| + new_flags ^= PR_POLL_WRITE; /* don't select on write. */
|
| + }
|
| + new_flags |= PR_POLL_READ; /* do select on read. */
|
| }
|
| }
|
| } else if ((new_flags & PR_POLL_READ) && (SSL_DataPending(fd) > 0)) {
|
|
|