aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2019-10-17 16:02:13 +0300
committerMaxim Dounin <mdounin@mdounin.ru>2019-10-17 16:02:13 +0300
commitd2ea226229f4039953af48bb7e0599c076f01c1f (patch)
treeb85faad04fdd64e08307badcb77f1622e2900fd0
parent60609f2372f62628191bf01ed856a46cd488921b (diff)
downloadnginx-d2ea226229f4039953af48bb7e0599c076f01c1f.tar.gz
nginx-d2ea226229f4039953af48bb7e0599c076f01c1f.zip
SSL: improved ngx_ssl_recv_chain() to stop if c->read->ready is 0.
As long as there are data to read in the socket, yet the amount of data is less than total size of the buffers in the chain, this saves one unneeded read() syscall. Before this change, reading only stopped if ngx_ssl_recv() returned no data, that is, two read() syscalls in a row returned EAGAIN.
-rw-r--r--src/event/ngx_event_openssl.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
index 3737839d8..4e3eb391c 100644
--- a/src/event/ngx_event_openssl.c
+++ b/src/event/ngx_event_openssl.c
@@ -1922,6 +1922,10 @@ ngx_ssl_recv_chain(ngx_connection_t *c, ngx_chain_t *cl, off_t limit)
last += n;
bytes += n;
+ if (!c->read->ready) {
+ return bytes;
+ }
+
if (last == b->end) {
cl = cl->next;