]> git.kaiwu.me - nginx.git/commitdiff
HTTP/2: run posted requests after reading body.
authorMaxim Dounin <mdounin@mdounin.ru>
Wed, 23 Sep 2020 16:52:31 +0000 (19:52 +0300)
committerMaxim Dounin <mdounin@mdounin.ru>
Wed, 23 Sep 2020 16:52:31 +0000 (19:52 +0300)
HTTP/2 code failed to run posted requests after calling the request body
handler, and this resulted in connection hang if a subrequest was created
in the body handler and no other actions were made.

src/http/v2/ngx_http_v2.c

index 9c994b8a377a4ff9a44896bcad851834cdd37c95..43a4fded50c191cc48508300051b79467c093e37 100644 (file)
@@ -1058,6 +1058,7 @@ ngx_http_v2_state_read_data(ngx_http_v2_connection_t *h2c, u_char *pos,
     size_t                   size;
     ngx_buf_t               *buf;
     ngx_int_t                rc;
+    ngx_connection_t        *fc;
     ngx_http_request_t      *r;
     ngx_http_v2_stream_t    *stream;
     ngx_http_v2_srv_conf_t  *h2scf;
@@ -1076,6 +1077,7 @@ ngx_http_v2_state_read_data(ngx_http_v2_connection_t *h2c, u_char *pos,
     }
 
     r = stream->request;
+    fc = r->connection;
 
     if (r->reading_body && !r->request_body_no_buffering) {
         ngx_log_debug0(NGX_LOG_DEBUG_HTTP, h2c->connection->log, 0,
@@ -1108,6 +1110,8 @@ ngx_http_v2_state_read_data(ngx_http_v2_connection_t *h2c, u_char *pos,
             ngx_http_finalize_request(r, rc);
         }
 
+        ngx_http_run_posted_requests(fc);
+
     } else if (size) {
         buf = stream->preread;