]> git.kaiwu.me - nginx.git/commitdiff
HTTP/3: call ngx_handle_read_event() from client header handler.
authorRoman Arutyunyan <arut@nginx.com>
Fri, 29 Jan 2021 16:42:47 +0000 (19:42 +0300)
committerRoman Arutyunyan <arut@nginx.com>
Fri, 29 Jan 2021 16:42:47 +0000 (19:42 +0300)
This function should be called at the end of an event handler to prepare the
event for the next handler call.  Particularly, the "active" flag is set or
cleared depending on data availability.

With this call missing in one code path, read handler was not called again
after handling the initial part of the client request, if the request was too
big to fit into a single STREAM frame.

Now ngx_handle_read_event() is called in this code path.  Also, read timer is
restarted.

src/http/v3/ngx_http_v3_request.c

index fb16267181dbb2412e0d3ca46fc9b0b6d3e873b2..0b795413772c904f78dd1beb2e0b4b1000f6c5b1 100644 (file)
@@ -158,11 +158,12 @@ ngx_http_v3_process_request(ngx_event_t *rev)
 
         if (b->pos == b->last) {
 
-            if (!rev->ready) {
-                break;
-            }
+            if (rev->ready) {
+                n = c->recv(c, b->start, b->end - b->start);
 
-            n = c->recv(c, b->start, b->end - b->start);
+            } else {
+                n = NGX_AGAIN;
+            }
 
             if (n == NGX_AGAIN) {
                 if (!rev->timer_set) {