Chromium Code Reviews| Index: net/socket/ssl_client_socket_nss.cc |
| =================================================================== |
| --- net/socket/ssl_client_socket_nss.cc (revision 137212) |
| +++ net/socket/ssl_client_socket_nss.cc (working copy) |
| @@ -430,6 +430,7 @@ |
| const SSLClientSocketContext& context) |
| : transport_send_busy_(false), |
| transport_recv_busy_(false), |
| + transport_eof_(false), |
| transport_(transport_socket), |
| host_and_port_(host_and_port), |
| ssl_config_(ssl_config), |
| @@ -633,6 +634,7 @@ |
| user_write_callback_.Reset(); |
| transport_send_busy_ = false; |
| transport_recv_busy_ = false; |
| + transport_eof_ = false; |
| user_read_buf_ = NULL; |
| user_read_buf_len_ = 0; |
| user_write_buf_ = NULL; |
| @@ -1219,6 +1221,7 @@ |
| network_moved = DoTransportIO(); |
| } while (rv_read == ERR_IO_PENDING && |
| rv_write == ERR_IO_PENDING && |
| + (user_read_buf_ || user_write_buf_) && |
|
Ryan Sleevi
2012/05/16 02:13:03
Double checking my understanding here.
Pre-condit
wtc
2012/05/16 03:04:29
This turns out to be false. While investigating t
Ryan Sleevi
2012/05/16 03:44:11
Ok, I think I've reasoned about this check. It sti
wtc
2012/05/16 17:51:52
You are right that the (user_read_buf_ || user_wri
|
| network_moved); |
| if (user_read_buf_ && rv_read != ERR_IO_PENDING) |
| @@ -1922,7 +1925,9 @@ |
| if (rv > 0) |
| network_moved = true; |
| } while (rv > 0); |
| - if (BufferRecv() >= 0) |
| + bool reached_eof = transport_eof_; |
| + rv = BufferRecv(); |
|
Ryan Sleevi
2012/05/16 02:13:03
If we'd previously reached eof, why call BufferRec
wtc
2012/05/16 03:04:29
Ah, you're right. Not calling BufferRecv if we'd
|
| + if (rv > 0 || (!reached_eof && rv == 0)) |
| network_moved = true; |
| } |
| LeaveFunction(network_moved); |
| @@ -1990,8 +1995,11 @@ |
| if (rv == ERR_IO_PENDING) { |
| transport_recv_busy_ = true; |
| } else { |
| - if (rv > 0) |
| + if (rv > 0) { |
| memcpy(buf, recv_buffer_->data(), rv); |
| + } else if (rv == 0) { |
| + transport_eof_ = true; |
| + } |
| memio_PutReadResult(nss_bufs_, MapErrorToNSS(rv)); |
| recv_buffer_ = NULL; |
| } |
| @@ -2006,6 +2014,8 @@ |
| char* buf; |
| memio_GetReadParams(nss_bufs_, &buf); |
| memcpy(buf, recv_buffer_->data(), result); |
| + } else if (result == 0) { |
| + transport_eof_ = true; |
| } |
| recv_buffer_ = NULL; |
| memio_PutReadResult(nss_bufs_, MapErrorToNSS(result)); |