<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jul 24, 2017, at 11:42 AM, Valentin V. Bartenev <<a href="mailto:vbart@nginx.com" class="">vbart@nginx.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">On Thursday 22 June 2017 18:23:46 Vlad Krasnov via nginx-devel wrote:</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class=""># HG changeset patch<br class=""># User Vlad Krasnov <<a href="mailto:vlad@cloudflare.com" class="">vlad@cloudflare.com</a>><br class=""># Date 1498167669 25200<br class=""># Thu Jun 22 14:41:09 2017 -0700<br class=""># Node ID 895cea03ac21fb18d2c2ba32389cd67dc74ddbd0<br class=""># Parent a39bc74873faf9e5bea616561b43f6ecc55229f9<br class="">HTTP/2: add support for HPACK encoding<br class=""><br class="">Add support for full HPACK encoding as per RFC7541.<br class="">This modification improves header compression ratio by 5-10% for the first<br class="">response, and by 40-95% for consequential responses on the connection.<br class="">The implementation is similar to the one used by Cloudflare.<br class=""><br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">First of all, there's no way for a patch to be committed with so</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">many style issues.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Please, examine how existing nginx sources are formatted and mimic</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">this style.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div>OK.</div><div><br class=""><blockquote type="cite" class=""><div class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">diff -r a39bc74873fa -r 895cea03ac21 auto/modules<br class="">--- a/auto/modules<span class="Apple-tab-span" style="white-space: pre;"> </span>Mon Jun 19 14:25:42 2017 +0300<br class="">+++ b/auto/modules<span class="Apple-tab-span" style="white-space: pre;"> </span>Thu Jun 22 14:41:09 2017 -0700<br class="">@@ -436,6 +436,10 @@<br class=""> . auto/module<br class=""> fi<br class=""><br class="">+ if [ $HTTP_V2_HPACK_ENC = YES ]; then<br class="">+ have=NGX_HTTP_V2_HPACK_ENC . auto/have<br class="">+ fi<br class="">+<br class=""> if :; then<br class=""> ngx_module_name=ngx_http_static_module<br class=""> ngx_module_incs=<br class="">diff -r a39bc74873fa -r 895cea03ac21 auto/options<br class="">--- a/auto/options<span class="Apple-tab-span" style="white-space: pre;"> </span>Mon Jun 19 14:25:42 2017 +0300<br class="">+++ b/auto/options<span class="Apple-tab-span" style="white-space: pre;"> </span>Thu Jun 22 14:41:09 2017 -0700<br class="">@@ -59,6 +59,7 @@<br class="">HTTP_GZIP=YES<br class="">HTTP_SSL=NO<br class="">HTTP_V2=NO<br class="">+HTTP_V2_HPACK_ENC=NO<br class="">HTTP_SSI=YES<br class="">HTTP_POSTPONE=NO<br class="">HTTP_REALIP=NO<br class="">@@ -221,6 +222,7 @@<br class=""><br class=""> --with-http_ssl_module) HTTP_SSL=YES ;;<br class=""> --with-http_v2_module) HTTP_V2=YES ;;<br class="">+ --with-http_v2_hpack_enc) HTTP_V2_HPACK_ENC=YES ;;<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">What's the reason for conditional compilation?</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div><div>Internal reasons, but I decided to keep it in the patch, because maybe not everyone wants that overhead.</div><br class=""><blockquote type="cite" class=""><div class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class=""> --with-http_realip_module) HTTP_REALIP=YES ;;<br class=""> --with-http_addition_module) HTTP_ADDITION=YES ;;<br class=""> --with-http_xslt_module) HTTP_XSLT=YES ;;<br class="">@@ -430,6 +432,7 @@<br class=""><br class=""> --with-http_ssl_module enable ngx_http_ssl_module<br class=""> --with-http_v2_module enable ngx_http_v2_module<br class="">+ --with-http_v2_hpack_enc enable ngx_http_v2_hpack_enc<br class=""> --with-http_realip_module enable ngx_http_realip_module<br class=""> --with-http_addition_module enable ngx_http_addition_module<br class=""> --with-http_xslt_module enable ngx_http_xslt_module<br class="">diff -r a39bc74873fa -r 895cea03ac21 src/core/ngx_murmurhash.c<br class="">--- a/src/core/ngx_murmurhash.c<span class="Apple-tab-span" style="white-space: pre;"> </span>Mon Jun 19 14:25:42 2017 +0300<br class="">+++ b/src/core/ngx_murmurhash.c<span class="Apple-tab-span" style="white-space: pre;"> </span>Thu Jun 22 14:41:09 2017 -0700<br class="">@@ -50,3 +50,63 @@<br class=""><br class=""> return h;<br class="">}<br class="">+<br class="">+<br class="">+uint64_t<br class="">+ngx_murmur_hash2_64(u_char *data, size_t len, uint64_t seed)<br class="">+{<br class="">+ uint64_t h, k;<br class="">+<br class="">+ h = seed ^ len;<br class="">+<br class="">+ while (len >= 8) {<br class="">+ k = data[0];<br class="">+ k |= data[1] << 8;<br class="">+ k |= data[2] << 16;<br class="">+ k |= data[3] << 24;<br class="">+ k |= (uint64_t)data[4] << 32;<br class="">+ k |= (uint64_t)data[5] << 40;<br class="">+ k |= (uint64_t)data[6] << 48;<br class="">+ k |= (uint64_t)data[7] << 56;<br class="">+<br class="">+ k *= 0xc6a4a7935bd1e995ull;<br class="">+ k ^= k >> 47;<br class="">+ k *= 0xc6a4a7935bd1e995ull;<br class="">+<br class="">+ h ^= k;<br class="">+ h *= 0xc6a4a7935bd1e995ull;<br class="">+<br class="">+ data += 8;<br class="">+ len -= 8;<br class="">+ }<br class="">+<br class="">+ switch (len) {<br class="">+ case 7:<br class="">+ h ^= (uint64_t)data[6] << 48;<br class="">+ /* fall through */<br class="">+ case 6:<br class="">+ h ^= (uint64_t)data[5] << 40;<br class="">+ /* fall through */<br class="">+ case 5:<br class="">+ h ^= (uint64_t)data[4] << 32;<br class="">+ /* fall through */<br class="">+ case 4:<br class="">+ h ^= data[3] << 24;<br class="">+ /* fall through */<br class="">+ case 3:<br class="">+ h ^= data[2] << 16;<br class="">+ /* fall through */<br class="">+ case 2:<br class="">+ h ^= data[1] << 8;<br class="">+ /* fall through */<br class="">+ case 1:<br class="">+ h ^= data[0];<br class="">+ h *= 0xc6a4a7935bd1e995ull;<br class="">+ }<br class="">+<br class="">+ h ^= h >> 47;<br class="">+ h *= 0xc6a4a7935bd1e995ull;<br class="">+ h ^= h >> 47;<br class="">+<br class="">+ return h;<br class="">+}<br class="">diff -r a39bc74873fa -r 895cea03ac21 src/core/ngx_murmurhash.h<br class="">--- a/src/core/ngx_murmurhash.h<span class="Apple-tab-span" style="white-space: pre;"> </span>Mon Jun 19 14:25:42 2017 +0300<br class="">+++ b/src/core/ngx_murmurhash.h<span class="Apple-tab-span" style="white-space: pre;"> </span>Thu Jun 22 14:41:09 2017 -0700<br class="">@@ -15,5 +15,7 @@<br class=""><br class="">uint32_t ngx_murmur_hash2(u_char *data, size_t len);<br class=""><br class="">+uint64_t ngx_murmur_hash2_64(u_char *data, size_t len, uint64_t seed);<br class="">+<br class=""><br class="">#endif /* _NGX_MURMURHASH_H_INCLUDED_ */<br class="">diff -r a39bc74873fa -r 895cea03ac21 src/http/v2/ngx_http_v2.c<br class="">--- a/src/http/v2/ngx_http_v2.c<span class="Apple-tab-span" style="white-space: pre;"> </span>Mon Jun 19 14:25:42 2017 +0300<br class="">+++ b/src/http/v2/ngx_http_v2.c<span class="Apple-tab-span" style="white-space: pre;"> </span>Thu Jun 22 14:41:09 2017 -0700<br class="">@@ -245,6 +245,8 @@<br class=""><br class=""> h2c->frame_size = NGX_HTTP_V2_DEFAULT_FRAME_SIZE;<br class=""><br class="">+ h2c->max_hpack_table_size = NGX_HTTP_V2_DEFAULT_HPACK_TABLE_SIZE;<br class="">+<br class=""> h2scf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_v2_module);<br class=""><br class=""> h2c->pool = ngx_create_pool(h2scf->pool_size, h2c->connection->log);<br class="">@@ -2018,6 +2020,17 @@<br class=""> h2c->frame_size = value;<br class=""> break;<br class=""><br class="">+ case NGX_HTTP_V2_HEADER_TABLE_SIZE_SETTING:<br class="">+<br class="">+ if (value > NGX_HTTP_V2_MAX_HPACK_TABLE_SIZE) {<br class="">+ h2c->max_hpack_table_size = NGX_HTTP_V2_MAX_HPACK_TABLE_SIZE;<br class="">+ } else {<br class="">+ h2c->max_hpack_table_size = value;<br class="">+ }<br class="">+<br class="">+ h2c->indicate_resize = 1;<br class="">+ break;<br class="">+<br class=""> default:<br class=""> break;<br class=""> }<br class="">diff -r a39bc74873fa -r 895cea03ac21 src/http/v2/ngx_http_v2.h<br class="">--- a/src/http/v2/ngx_http_v2.h<span class="Apple-tab-span" style="white-space: pre;"> </span>Mon Jun 19 14:25:42 2017 +0300<br class="">+++ b/src/http/v2/ngx_http_v2.h<span class="Apple-tab-span" style="white-space: pre;"> </span>Thu Jun 22 14:41:09 2017 -0700<br class="">@@ -49,6 +49,13 @@<br class="">#define NGX_HTTP_V2_MAX_WINDOW ((1U << 31) - 1)<br class="">#define NGX_HTTP_V2_DEFAULT_WINDOW 65535<br class=""><br class="">+#define HPACK_ENC_HTABLE_SZ 128 /* better to keep a PoT < 64k */<br class="">+#define HPACK_ENC_HTABLE_ENTRIES ((HPACK_ENC_HTABLE_SZ * 100) / 128)<br class="">+#define HPACK_ENC_DYNAMIC_KEY_TBL_SZ 10 /* 10 is sufficient for most */<br class="">+#define HPACK_ENC_MAX_ENTRY 512 /* longest header size to match */<br class="">+<br class="">+#define NGX_HTTP_V2_DEFAULT_HPACK_TABLE_SIZE 4096<br class="">+#define NGX_HTTP_V2_MAX_HPACK_TABLE_SIZE 16384 /* < 64k */<br class=""><br class="">typedef struct ngx_http_v2_connection_s ngx_http_v2_connection_t;<br class="">typedef struct ngx_http_v2_node_s ngx_http_v2_node_t;<br class="">@@ -110,6 +117,46 @@<br class="">} ngx_http_v2_hpack_t;<br class=""><br class=""><br class="">+#if (NGX_HTTP_V2_HPACK_ENC)<br class="">+typedef struct {<br class="">+ uint64_t hash_val;<br class="">+ uint32_t index;<br class="">+ uint16_t pos;<br class="">+ uint16_t klen, vlen;<br class="">+ uint16_t size;<br class="">+ uint16_t next;<br class="">+} ngx_http_v2_hpack_enc_entry_t;<br class="">+<br class="">+<br class="">+typedef struct {<br class="">+ uint64_t hash_val;<br class="">+ uint32_t index;<br class="">+ uint16_t pos;<br class="">+ uint16_t klen;<br class="">+} ngx_http_v2_hpack_name_entry_t;<br class="">+<br class="">+<br class="">+typedef struct {<br class="">+ size_t size; /* size as defined in RFC 7541 */<br class="">+ uint32_t top; /* the last entry */<br class="">+ uint32_t pos;<br class="">+ uint16_t n_elems; /* number of elements */<br class="">+ uint16_t base; /* index of the oldest entry */<br class="">+ uint16_t last; /* index of the newest entry */<br class="">+<br class="">+ /* hash table for dynamic entries, instead using a generic hash table,<br class="">+ which would be too slow to process a significant amount of headers,<br class="">+ this table is not determenistic, and might ocasionally fail to insert<br class="">+ a value, at the cost of slightly worse compression, but significantly<br class="">+ faster performance */<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Have you considered rbtree as an option?</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div><div>Yeah, I don’t think it would be faster.</div><br class=""><blockquote type="cite" class=""><div class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">+ ngx_http_v2_hpack_enc_entry_t htable[HPACK_ENC_HTABLE_SZ];<br class="">+ ngx_http_v2_hpack_name_entry_t heads[HPACK_ENC_DYNAMIC_KEY_TBL_SZ];<br class="">+ u_char storage[NGX_HTTP_V2_MAX_HPACK_TABLE_SIZE +<br class="">+ HPACK_ENC_MAX_ENTRY];<br class="">+} ngx_http_v2_hpack_enc_t;<br class="">+#endif<br class="">+<br class="">+<br class=""></blockquote><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">Well, it means that even idle connection will consume 18+ KB more</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">memory than before.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">That doesn't look like a generic solution suitable for most of our users.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">It should be at least configurable.</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote><div><br class=""></div><div>I can make it configurable fairly easily, but then it will require an extra allocation.</div><div><br class=""></div><div>Cheers,</div><div>Vlad</div><br class=""><blockquote type="cite" class=""><div class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class=""> wbr, Valentin V. Bartenev</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">_______________________________________________</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">nginx-devel mailing list</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><a href="mailto:nginx-devel@nginx.org" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">nginx-devel@nginx.org</a><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><a href="http://mailman.nginx.org/mailman/listinfo/nginx-devel" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">http://mailman.nginx.org/mailman/listinfo/nginx-devel</a></div></blockquote></div><br class=""></body></html>