SSL: fixed c->read->ready handling in ngx_ssl_recv().

If c->read->ready was reset, but later some data were read from a socket
buffer due to a call to ngx_ssl_recv(), the c->read->ready flag should
be restored if not all data were read from OpenSSL buffers (as kernel
won't notify us about the data anymore).

More details are available here:
http://mailman.nginx.org/pipermail/nginx/2013-November/041178.html
This commit is contained in:
Maxim Dounin 2013-11-29 17:16:06 +04:00
parent a443af4ee0
commit 2953968e4f
1 changed files with 5 additions and 0 deletions

View File

@ -965,6 +965,7 @@ ngx_ssl_recv(ngx_connection_t *c, u_char *buf, size_t size)
size -= n;
if (size == 0) {
c->read->ready = 1;
return bytes;
}
@ -974,6 +975,10 @@ ngx_ssl_recv(ngx_connection_t *c, u_char *buf, size_t size)
}
if (bytes) {
if (c->ssl->last != NGX_AGAIN) {
c->read->ready = 1;
}
return bytes;
}