Mercurial > hg > nginx
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; |