summaryrefslogtreecommitdiffhomepage
path: root/src/http
diff options
context:
space:
mode:
authorSergey Kandaurov <pluknet@nginx.com>2022-02-14 10:14:07 +0300
committerSergey Kandaurov <pluknet@nginx.com>2022-02-14 10:14:07 +0300
commita767450093200c76dba8851a9453f13296dd6371 (patch)
treed8defe592e6ce44e1dd79ebbd6915bc215855403 /src/http
parent45a8ca0e7a1ae7ec4f7769919e9f3e007113d5ad (diff)
parent828fb94e1dbe1c433edd39147ba085c4622c99ed (diff)
downloadnginx-a767450093200c76dba8851a9453f13296dd6371.tar.gz
nginx-a767450093200c76dba8851a9453f13296dd6371.tar.bz2
Merged with the default branch.
Diffstat (limited to '')
-rw-r--r--src/http/ngx_http_file_cache.c5
-rw-r--r--src/http/ngx_http_write_filter_module.c3
-rw-r--r--src/http/v2/ngx_http_v2.h2
-rw-r--r--src/http/v2/ngx_http_v2_filter_module.c7
4 files changed, 14 insertions, 3 deletions
diff --git a/src/http/ngx_http_file_cache.c b/src/http/ngx_http_file_cache.c
index c40093bca..4d2f6c42c 100644
--- a/src/http/ngx_http_file_cache.c
+++ b/src/http/ngx_http_file_cache.c
@@ -1756,6 +1756,11 @@ ngx_http_file_cache_forced_expire(ngx_http_file_cache_t *cache)
break;
}
+ if (fcn->deleting) {
+ wait = 1;
+ break;
+ }
+
p = ngx_hex_dump(key, (u_char *) &fcn->node.key,
sizeof(ngx_rbtree_key_t));
len = NGX_HTTP_CACHE_KEY_LEN - sizeof(ngx_rbtree_key_t);
diff --git a/src/http/ngx_http_write_filter_module.c b/src/http/ngx_http_write_filter_module.c
index 8ef19b645..9188ee948 100644
--- a/src/http/ngx_http_write_filter_module.c
+++ b/src/http/ngx_http_write_filter_module.c
@@ -227,7 +227,8 @@ ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *in)
if (size == 0
&& !(c->buffered & NGX_LOWLEVEL_BUFFERED)
- && !(last && c->need_last_buf))
+ && !(last && c->need_last_buf)
+ && !(flush && c->need_flush_buf))
{
if (last || flush || sync) {
for (cl = r->out; cl; /* void */) {
diff --git a/src/http/v2/ngx_http_v2.h b/src/http/v2/ngx_http_v2.h
index 70ee287ae..4e252931c 100644
--- a/src/http/v2/ngx_http_v2.h
+++ b/src/http/v2/ngx_http_v2.h
@@ -153,12 +153,12 @@ struct ngx_http_v2_connection_s {
ngx_queue_t dependencies;
ngx_queue_t closed;
+ ngx_uint_t closed_nodes;
ngx_uint_t last_sid;
ngx_uint_t last_push;
time_t lingering_time;
- unsigned closed_nodes:8;
unsigned settings_ack:1;
unsigned table_update:1;
unsigned blocked:1;
diff --git a/src/http/v2/ngx_http_v2_filter_module.c b/src/http/v2/ngx_http_v2_filter_module.c
index 9ffb155df..62b6a047c 100644
--- a/src/http/v2/ngx_http_v2_filter_module.c
+++ b/src/http/v2/ngx_http_v2_filter_module.c
@@ -665,6 +665,7 @@ ngx_http_v2_header_filter(ngx_http_request_t *r)
fc->send_chain = ngx_http_v2_send_chain;
fc->need_last_buf = 1;
+ fc->need_flush_buf = 1;
return ngx_http_v2_filter_send(fc, stream);
}
@@ -1815,7 +1816,11 @@ ngx_http_v2_waiting_queue(ngx_http_v2_connection_t *h2c,
static ngx_inline ngx_int_t
ngx_http_v2_filter_send(ngx_connection_t *fc, ngx_http_v2_stream_t *stream)
{
- if (stream->queued == 0) {
+ ngx_connection_t *c;
+
+ c = stream->connection->connection;
+
+ if (stream->queued == 0 && !c->buffered) {
fc->buffered &= ~NGX_HTTP_V2_BUFFERED;
return NGX_OK;
}