changeset 8784:7d32c3c93678 quic

QUIC: call stream read handler on new data arrival. This was broken in b3f6ad181df4.
author Roman Arutyunyan <arut@nginx.com>
date Wed, 26 May 2021 13:07:06 +0300
parents 60c6e8d8d3ae
children e6c26cb4d38b
files src/event/quic/ngx_event_quic_streams.c
diffstat 1 files changed, 19 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/event/quic/ngx_event_quic_streams.c
+++ b/src/event/quic/ngx_event_quic_streams.c
@@ -814,6 +814,7 @@ ngx_quic_handle_stream_frame(ngx_connect
 {
     uint64_t                  last;
     ngx_pool_t               *pool;
+    ngx_event_t              *rev;
     ngx_connection_t         *sc;
     ngx_quic_stream_t        *qs;
     ngx_quic_connection_t    *qc;
@@ -895,9 +896,7 @@ ngx_quic_handle_stream_frame(ngx_connect
         f->offset = qs->recv_offset;
     }
 
-    if (f->offset == qs->recv_offset) {
-        qs->connection->read->ready = 1;
-    }
+    rev = qs->connection->read;
 
     if (f->fin) {
         if (qs->final_size != (uint64_t) -1 && qs->final_size != last) {
@@ -910,12 +909,26 @@ ngx_quic_handle_stream_frame(ngx_connect
             return NGX_ERROR;
         }
 
-        qs->connection->read->pending_eof = 1;
+        rev->pending_eof = 1;
         qs->final_size = last;
     }
 
-    return ngx_quic_order_bufs(c, &qs->in, frame->data,
-                               f->offset - qs->recv_offset);
+    if (ngx_quic_order_bufs(c, &qs->in, frame->data,
+                            f->offset - qs->recv_offset)
+        != NGX_OK)
+    {
+        return NGX_ERROR;
+    }
+
+    if (f->offset == qs->recv_offset) {
+        rev->ready = 1;
+
+        if (rev->active) {
+            rev->handler(rev);
+        }
+    }
+
+    return NGX_OK;
 
 cleanup: