diff options
| author | Valentin Bartenev <vbart@nginx.com> | 2016-02-24 16:05:47 +0300 |
|---|---|---|
| committer | Valentin Bartenev <vbart@nginx.com> | 2016-02-24 16:05:47 +0300 |
| commit | 4e6a490fa7ecb227296e277e2c3b7664441e5b40 (patch) | |
| tree | 52cf5e152b567df990d8d77d10a118d7783f9a0a /src/http/v2/ngx_http_v2.h | |
| parent | 8b40f1eaec90be72e791904b345db15f536dca45 (diff) | |
| download | nginx-4e6a490fa7ecb227296e277e2c3b7664441e5b40.tar.gz nginx-4e6a490fa7ecb227296e277e2c3b7664441e5b40.tar.bz2 | |
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.
Diffstat (limited to '')
| -rw-r--r-- | src/http/v2/ngx_http_v2.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/http/v2/ngx_http_v2.h b/src/http/v2/ngx_http_v2.h index 070aa435a..5a791e626 100644 --- a/src/http/v2/ngx_http_v2.h +++ b/src/http/v2/ngx_http_v2.h @@ -73,6 +73,7 @@ typedef struct { unsigned flags:8; unsigned incomplete:1; + unsigned keep_pool:1; /* HPACK */ unsigned parse_name:1; @@ -186,6 +187,8 @@ struct ngx_http_v2_stream_s { size_t header_limit; + ngx_pool_t *pool; + unsigned handled:1; unsigned blocked:1; unsigned exhausted:1; |
