aboutsummaryrefslogtreecommitdiff
path: root/src/event/ngx_event_openssl.c
diff options
context:
space:
mode:
authorSergey Kandaurov <pluknet@nginx.com>2021-12-29 15:17:26 +0300
committerSergey Kandaurov <pluknet@nginx.com>2021-12-29 15:17:26 +0300
commitf3363a8dbe29b3159881e259b2690c78757c946f (patch)
treedfc3e7dd6803c65a8b2a94c941fe258d05f6c756 /src/event/ngx_event_openssl.c
parentfa21bf0cc7ba2d94f66a061d644163547d79e6a2 (diff)
parent054944feb352ce16c5ef99e3fb58b8fd5796c0f1 (diff)
downloadnginx-f3363a8dbe29b3159881e259b2690c78757c946f.tar.gz
nginx-f3363a8dbe29b3159881e259b2690c78757c946f.zip
Merged with the default branch.
Diffstat (limited to 'src/event/ngx_event_openssl.c')
-rw-r--r--src/event/ngx_event_openssl.c37
1 files changed, 35 insertions, 2 deletions
diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
index c1485f35a..ef9eec7be 100644
--- a/src/event/ngx_event_openssl.c
+++ b/src/event/ngx_event_openssl.c
@@ -2942,7 +2942,7 @@ ngx_ssl_sendfile(ngx_connection_t *c, ngx_buf_t *file, size_t size)
{
#ifdef BIO_get_ktls_send
- int sslerr;
+ int sslerr, flags;
ssize_t n;
ngx_err_t err;
@@ -2954,8 +2954,20 @@ ngx_ssl_sendfile(ngx_connection_t *c, ngx_buf_t *file, size_t size)
ngx_set_errno(0);
+#if (NGX_HAVE_SENDFILE_NODISKIO)
+
+ flags = (c->busy_count <= 2) ? SF_NODISKIO : 0;
+
+ if (file->file->directio) {
+ flags |= SF_NOCACHE;
+ }
+
+#else
+ flags = 0;
+#endif
+
n = SSL_sendfile(c->ssl->connection, file->file->fd, file->file_pos,
- size, 0);
+ size, flags);
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_sendfile: %d", n);
@@ -2974,6 +2986,10 @@ ngx_ssl_sendfile(ngx_connection_t *c, ngx_buf_t *file, size_t size)
ngx_post_event(c->read, &ngx_posted_events);
}
+#if (NGX_HAVE_SENDFILE_NODISKIO)
+ c->busy_count = 0;
+#endif
+
c->sent += n;
return n;
@@ -3038,6 +3054,23 @@ ngx_ssl_sendfile(ngx_connection_t *c, ngx_buf_t *file, size_t size)
ngx_post_event(c->read, &ngx_posted_events);
}
+#if (NGX_HAVE_SENDFILE_NODISKIO)
+
+ if (ngx_errno == EBUSY) {
+ c->busy_count++;
+
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
+ "SSL_sendfile() busy, count:%d", c->busy_count);
+
+ if (c->write->posted) {
+ ngx_delete_posted_event(c->write);
+ }
+
+ ngx_post_event(c->write, &ngx_posted_next_events);
+ }
+
+#endif
+
c->write->ready = 0;
return NGX_AGAIN;
}