From: Roman Arutyunyan Date: Sun, 6 Sep 2020 11:51:23 +0000 (+0300) Subject: QUIC: do not send STOP_SENDING after STREAM fin. X-Git-Url: http://git.kaiwu.me/%7B@url%7D?a=commitdiff_plain;h=6983bc0a37bdec605b471643c2e6a0b0f6d6140f;p=nginx.git QUIC: do not send STOP_SENDING after STREAM fin. Previously STOP_SENDING was sent to client upon stream closure if rev->eof and rev->error were not set. This was an indirect indication that no RESET_STREAM or STREAM fin has arrived. But it is indeed possible that rev->eof is not set, but STREAM fin has already been received, just not read out by the application. In this case sending STOP_SENDING does not make sense and can be misleading for some clients. --- diff --git a/src/event/ngx_event_quic.c b/src/event/ngx_event_quic.c index f158b0fc7..2364caebf 100644 --- a/src/event/ngx_event_quic.c +++ b/src/event/ngx_event_quic.c @@ -4895,7 +4895,7 @@ ngx_quic_stream_cleanup_handler(void *data) if ((qs->id & NGX_QUIC_STREAM_SERVER_INITIATED) == 0 || (qs->id & NGX_QUIC_STREAM_UNIDIRECTIONAL) == 0) { - if (!c->read->eof && !c->read->error) { + if (!c->read->pending_eof && !c->read->error) { frame = ngx_quic_alloc_frame(pc, 0); if (frame == NULL) { return;