From 84a783501590e13ab27277e11f179067c08d38b3 Mon Sep 17 00:00:00 2001 From: Roman Arutyunyan Date: Fri, 27 Mar 2020 10:02:45 +0300 Subject: [PATCH] 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. --- src/event/ngx_event_quic.c | 9 +++++++-- 1 file 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,