comparison src/http/v2/ngx_http_v2.h @ 6411:8ec349bb60b2

HTTP/2: always use temporary pool for processing headers. This is required for implementing per request timeouts. Previously, the temporary pool was used only during skipping of headers and the request pool was used otherwise. That required switching of pools if the request was closed while parsing. It wasn't a problem since the request could be closed only after the validation of the fully parsed header. With the per request timeouts, the request can be closed at any moment, and switching of pools in the middle of parsing header name or value becomes a problem. To overcome this, the temporary pool is now always created and used. Special checks are added to keep it when either the stream is being processed or until header block is fully parsed.
author Valentin Bartenev <vbart@nginx.com>
date Wed, 24 Feb 2016 16:05:47 +0300
parents ba3c2ca21aa5
children 92464ebace8e
comparison
equal deleted inserted replaced
6410:c6ccc1ea9450 6411:8ec349bb60b2
71 size_t length; 71 size_t length;
72 size_t padding; 72 size_t padding;
73 unsigned flags:8; 73 unsigned flags:8;
74 74
75 unsigned incomplete:1; 75 unsigned incomplete:1;
76 unsigned keep_pool:1;
76 77
77 /* HPACK */ 78 /* HPACK */
78 unsigned parse_name:1; 79 unsigned parse_name:1;
79 unsigned parse_value:1; 80 unsigned parse_value:1;
80 unsigned index:1; 81 unsigned index:1;
184 185
185 ngx_array_t *cookies; 186 ngx_array_t *cookies;
186 187
187 size_t header_limit; 188 size_t header_limit;
188 189
190 ngx_pool_t *pool;
191
189 unsigned handled:1; 192 unsigned handled:1;
190 unsigned blocked:1; 193 unsigned blocked:1;
191 unsigned exhausted:1; 194 unsigned exhausted:1;
192 unsigned in_closed:1; 195 unsigned in_closed:1;
193 unsigned out_closed:1; 196 unsigned out_closed:1;