comparison src/http/v2/ngx_http_v2.c @ 7769:0a5687a458de

HTTP/2: fixed reusing connections with active requests. New connections are marked reusable by ngx_http_init_connection() if there are no data available for reading. As a result, if SSL is not used, ngx_http_v2_init() might be called when the connection is marked reusable. If a HEADERS frame is immediately available for reading, this resulted in connection being preserved in reusable state with an active request, and possibly closed later as if during worker shutdown (that is, after all active requests were finalized). Fix is to explicitly mark connections non-reusable in ngx_http_v2_init() instead of (incorrectly) assuming they are already non-reusable. Found by Sergey Kandaurov.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 11 Feb 2021 21:52:17 +0300
parents fc536dcdbbf7
children 02be1baed382
comparison
equal deleted inserted replaced
7768:fc536dcdbbf7 7769:0a5687a458de
324 324
325 rev->handler = ngx_http_v2_read_handler; 325 rev->handler = ngx_http_v2_read_handler;
326 c->write->handler = ngx_http_v2_write_handler; 326 c->write->handler = ngx_http_v2_write_handler;
327 327
328 c->idle = 1; 328 c->idle = 1;
329 ngx_reusable_connection(c, 0);
329 330
330 ngx_http_v2_read_handler(rev); 331 ngx_http_v2_read_handler(rev);
331 } 332 }
332 333
333 334