[PATCH 14 of 15] Tempfiles: Set send_timeout inside ngx_http_cache_send
Jiří Setnička
jiri.setnicka at cdn77.com
Fri Jan 28 16:32:06 UTC 2022
# HG changeset patch
# User Jiří Setnička <jiri.setnicka at cdn77.com>
# Date 1643385660 -3600
# Fri Jan 28 17:01:00 2022 +0100
# Node ID 3cd1f04d933137153b0628819ccb251d1f57614b
# Parent 5e64af4c94860cd5cf4b9af5a265d3a087e7b735
Tempfiles: Set send_timeout inside ngx_http_cache_send
diff --git a/src/http/ngx_http_file_cache.c b/src/http/ngx_http_file_cache.c
--- a/src/http/ngx_http_file_cache.c
+++ b/src/http/ngx_http_file_cache.c
@@ -1953,9 +1953,10 @@ done:
ngx_int_t
ngx_http_cache_send(ngx_http_request_t *r)
{
- ngx_int_t rc;
- ngx_event_t *wev;
- ngx_http_cache_t *c;
+ ngx_int_t rc;
+ ngx_event_t *wev;
+ ngx_http_cache_t *c;
+ ngx_http_core_loc_conf_t *clcf;
c = r->cache;
@@ -1965,6 +1966,33 @@ ngx_http_cache_send(ngx_http_request_t *
wev = r->connection->write;
+ clcf = ngx_http_get_module_loc_conf(r->main, ngx_http_core_module);
+
+ if (wev->timedout) {
+ ngx_log_error(NGX_LOG_INFO, r->connection->log, NGX_ETIMEDOUT,
+ "client timed out");
+ r->connection->timedout = 1;
+
+ return NGX_HTTP_REQUEST_TIME_OUT;
+ }
+
+ if (wev->delayed || r->aio) {
+ ngx_log_debug0(NGX_LOG_DEBUG_HTTP, wev->log, 0,
+ "http writer delayed");
+
+ if (!wev->delayed) {
+ ngx_add_timer(wev, clcf->send_timeout);
+ }
+
+ rc = ngx_handle_write_event(wev, clcf->send_lowat);
+ if (rc != NGX_OK) {
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "handle write event error: %d", rc);
+ return rc;
+ }
+
+ return NGX_BUSY;
+ }
+
ngx_shmtx_lock(&c->file_cache->shpool->mutex);
c->length = c->tf_node->length;
@@ -1978,6 +2006,14 @@ ngx_http_cache_send(ngx_http_request_t *
}
if (rc == NGX_AGAIN && !wev->ready) {
+ if (!wev->delayed) {
+ ngx_add_timer(wev, clcf->send_timeout);
+ }
+
+ if (ngx_handle_write_event(wev, clcf->send_lowat) != NGX_OK) {
+ return NGX_ERROR;
+ }
+
return NGX_BUSY; /* epoll will wake us */
}
More information about the nginx-devel
mailing list