Chromium Code Reviews| Index: net/socket/ssl_server_socket_nss.cc |
| diff --git a/net/socket/ssl_server_socket_nss.cc b/net/socket/ssl_server_socket_nss.cc |
| index bdcff2c1002aab343b04c8327ea970b7ec844524..337c7f09a36ecba7ff09a7084dc8d6761265c171 100644 |
| --- a/net/socket/ssl_server_socket_nss.cc |
| +++ b/net/socket/ssl_server_socket_nss.cc |
| @@ -425,7 +425,10 @@ void SSLServerSocketNSS::OnSendComplete(int result) { |
| DoWriteCallback(rv); |
| } else { |
| // Ensure that any queued ciphertext is flushed. |
| - DoTransportIO(); |
| + bool network_moved = false; |
| + do { |
| + network_moved = DoTransportIO(); |
| + } while (network_moved); |
|
Wez
2011/07/18 21:53:33
I take it that
while (DoTransportIO()) { }
is ba
Sergey Ulanov
2011/07/19 19:26:56
reverted this change
|
| } |
| } |
| @@ -535,7 +538,7 @@ bool SSLServerSocketNSS::DoTransportIO() { |
| if (nss_bufs_ != NULL) { |
| int nsent = BufferSend(); |
| int nreceived = BufferRecv(); |
| - network_moved = (nsent > 0 || nreceived >= 0); |
| + network_moved = (nsent > 0 || nreceived > 0); |
| } |
| return network_moved; |
| } |
| @@ -623,6 +626,7 @@ int SSLServerSocketNSS::DoReadLoop(int result) { |
| rv = DoPayloadRead(); |
| network_moved = DoTransportIO(); |
| } while (rv == ERR_IO_PENDING && network_moved); |
| + |
| return rv; |
| } |
| @@ -642,11 +646,13 @@ int SSLServerSocketNSS::DoWriteLoop(int result) { |
| } |
| bool network_moved; |
| - int rv; |
| + int rv = ERR_IO_PENDING; |
| do { |
| - rv = DoPayloadWrite(); |
| + if (rv == ERR_IO_PENDING) |
| + rv = DoPayloadWrite(); |
| network_moved = DoTransportIO(); |
| - } while (rv == ERR_IO_PENDING && network_moved); |
| + } while (network_moved); |
|
Wez
2011/07/18 21:53:33
The loop now won't exit on failure (or success!) o
Sergey Ulanov
2011/07/19 19:26:56
Same as in client sockets: why can't we continue p
|
| + |
| return rv; |
| } |