aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoman Arutyunyan <arut@nginx.com>2020-03-27 10:02:45 +0300
committerRoman Arutyunyan <arut@nginx.com>2020-03-27 10:02:45 +0300
commit84a783501590e13ab27277e11f179067c08d38b3 (patch)
tree4679ba92f14f3ca2dbde036632339fa8928957da /src
parent89a6a4f19827317186fa807106454b024406abd0 (diff)
downloadnginx-84a783501590e13ab27277e11f179067c08d38b3.tar.gz
nginx-84a783501590e13ab27277e11f179067c08d38b3.zip
Fixed handling QUIC stream eof.
Set r->pending_eof flag for a new QUIC stream with the fin bit. Also, keep r->ready set when r->pending_eof is set and buffer is empty.
Diffstat (limited to 'src')
-rw-r--r--src/event/ngx_event_quic.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/event/ngx_event_quic.c b/src/event/ngx_event_quic.c
index 2a3e72803..458484a5f 100644
--- a/src/event/ngx_event_quic.c
+++ b/src/event/ngx_event_quic.c
@@ -1157,7 +1157,12 @@ ngx_quic_handle_stream_frame(ngx_connection_t *c,
b = sn->b;
b->last = ngx_cpymem(b->last, f->data, f->length);
- sn->c->read->ready = 1;
+ rev = sn->c->read;
+ rev->ready = 1;
+
+ if (f->fin) {
+ rev->pending_eof = 1;
+ }
qc->streams.handler(sn->c);
@@ -1595,7 +1600,7 @@ ngx_quic_stream_recv(ngx_connection_t *c, u_char *buf, size_t size)
if (b->pos == b->last) {
b->pos = b->start;
b->last = b->start;
- rev->ready = 0;
+ rev->ready = rev->pending_eof;
}
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,