Compare commits

..

54 Commits

Author SHA1 Message Date
6e41bcd018 bumped version to 1.7.0.1 and also updated the test suite to reflect recent changes. 2014-06-07 13:51:02 -07:00
62633cfa8d upgraded LuaJIT to v2.1-20140607. 2014-06-07 13:43:39 -07:00
cd74a45f39 updated tests to reflect recent changes. 2014-05-31 22:16:01 -07:00
bc3cb9243f feature: bundled new Lua library, lua-resty-lrucache, which is also enabled by default. 2014-05-31 22:15:40 -07:00
20ace16258 upgraded LuaJIT to v2.1-20140531, ngx_srcache to 0.27, and lua-resty-core to 0.0.7. 2014-05-31 21:58:37 -07:00
b54113f517 upgraded ngx_lua to 0.9.8. 2014-05-31 21:47:26 -07:00
39407386ea removed the cve-2013-2070 patch which is useless for nginx 1.7.0. 2014-05-22 13:32:19 -07:00
f1f3ba8ec6 upgraded LuaJIT to v2.1-20140520. 2014-05-20 14:18:07 -07:00
e37973502e bugfix: updated the dtrace patch because systemtap 2.5 no longer accepts the -xnolib option in its dtrace utility. 2014-05-18 15:46:20 -07:00
4085b21eb8 updated tests to reflect recent changes. 2014-05-17 14:24:00 -07:00
91484d0e11 upgraded LuaJIT to v2.1-20140515-2. 2014-05-17 14:19:29 -07:00
f5d5e5a2fa dist-check: use -DLUA_USE_TRACE_LOGS for the debug build of luajit. 2014-05-17 14:19:01 -07:00
1e7d38d479 removed our bundled version of ngx_http_auth_request_module because recent versions of the nginx core already have it. thanks @LazyZhu for the report in #47. 2014-05-17 14:17:50 -07:00
52e622a26c bugfix: our "prev_slab" field of ngx_slab_page_t could get out of sync in the slab_defrag patch for nginx. thanks Shuxin Yang for the catch. 2014-05-09 15:15:44 -07:00
20e69718ce fixed a bug in slab_defrag.patch for the nginx core that we may incorrectly access the padding area between the end of pool->pages and pool->start. thanks Shuxin Yang for the catch. 2014-05-07 13:11:06 -07:00
05334f1b5b updated the slab_defrag patch (for nginx) with better comments. thanks Shuxin for the suggestions. 2014-05-06 16:25:56 -07:00
91549c16b4 updated the slab_defrag patch (for nginx) a bit. 2014-05-06 14:24:24 -07:00
1dbd0b24d2 apply the slab_defrag patch to the nginx core by default. 2014-05-06 13:16:59 -07:00
9c3a123035 upgraded nginx core to 1.7.0. 2014-05-03 12:59:19 -07:00
2ee8fe558a updated tests to reflect recent changes; also bumped version to 1.5.12.1. 2014-04-29 13:32:50 -07:00
6ab944ebc4 upgraded ngx_lua_upstream module to 0.02. 2014-04-24 21:47:20 -07:00
332a42f57f upgraded ngx_redis2 to 0.11. 2014-04-24 21:25:19 -07:00
60bc64a72a build: updated links to reflect recent repos migration over the github "openresty" account. 2014-04-24 21:24:50 -07:00
e3b7de9b23 upgraded LuaJIT to v2.1-20140423. 2014-04-23 15:57:36 -07:00
c2fb3c9dac bumped version to 1.5.12.1rc3. 2014-04-19 20:06:11 -07:00
84f0092a6c upgraded LuaJIT to v2.1-20140419. 2014-04-19 20:02:47 -07:00
8cd9200a0f upgraded lua-resty-websocket to 0.03. 2014-04-11 21:17:01 -07:00
5d4854f3e9 upgraded ngx_echo to 0.53. 2014-04-11 21:11:25 -07:00
b6661ea47c bumped LuaJIT version to v2.1-20140411. 2014-04-11 21:10:51 -07:00
c9b0947bbb updated test suite to reflect recent changes. 2014-04-06 17:11:59 -07:00
77104b6cdf upgraded ngx_lua to 0.9.7. 2014-04-06 17:06:25 -07:00
e932c8a136 upgraded lua-resty-core to 0.0.6. 2014-04-06 16:59:23 -07:00
10fd3ea365 upgraded LuaJIT to v2.1-20140403. 2014-04-06 16:55:20 -07:00
303601ef8c upgraded lua-resty-lock to 0.03. 2014-04-06 16:54:13 -07:00
7f377fd354 upgraded lua-resty-string to 0.09. 2014-04-06 16:52:11 -07:00
fdad0c63ce upgraded ngx_form_input to 0.08. 2014-04-06 11:43:00 -07:00
b0f1e786c1 upgraded the nginx core to 1.5.12. 2014-04-03 17:36:53 -07:00
d001d17d0c upgraded ngx_lua to 0.9.6, ngx_srcache to 0.26, lua-resty-core to 0.0.5, and ngx_echo to 0.52. 2014-03-20 13:29:19 -07:00
37ba2b1015 backported the patch to the nginx core for the latest SPDY security vulnerability (CVE-2014-0133). 2014-03-19 17:38:31 -07:00
d21cc33749 nginx: disabled the -Werror option for clang too. thanks Hamish Forbes for the report. 2014-03-13 20:58:54 -07:00
2ba03387fd upgraded LuaJIT to v2.1-20140313. 2014-03-13 20:57:32 -07:00
03eae9e632 updated the tests to reflect recent changes; also added the --without-http_lua_upstream_module option to the usage message of ./configure. 2014-03-12 16:08:40 -07:00
965bd0fba0 upgraded lua-resty-redis to 0.20 for real this time. 2014-03-12 16:03:07 -07:00
f8783f35b1 upgraded luajit to v2.1-20140305, lua-cjson to 2.1.0.1, lua-resty-core to 0.0.4, lua-resty-redis to 0.20, and ngx_lua to 0.9.5; bundled the ngx_lua_upstream module and the lua-resty-upstream-healthcheck library. 2014-03-12 16:02:20 -07:00
e36d505d80 upgraded the patches for nginx 1.5.11. 2014-03-08 15:02:35 -08:00
3ddc73ac43 dist-check: added simple sanity test for the cjson.safe Lua module. 2014-02-28 21:22:33 -08:00
35934abdb1 configure: added support for DragonFlyBSD. thanks @lhmwzy for the patch in #44. 2014-02-28 19:46:26 -08:00
5836469559 doc: fixed more links. 2014-02-18 15:38:47 -08:00
925156bb2b doc: fixed a link. 2014-02-18 15:38:04 -08:00
1a8bffaf7a doc: updated the copyright year. 2014-02-18 15:36:25 -08:00
df3547fccd doc: added TOC. 2014-02-18 15:35:23 -08:00
3b078c75ae upgraded LuaJIT v2.1 to 2.1-20140129. 2014-01-29 15:18:17 -08:00
227e4e0da2 upgraded nginx core to 1.5.9. 2014-01-27 22:11:50 -08:00
676150c81b bugfix: setting $args might not make ngx_proxy (and others) honour the change. applied the setting_args_invalidates_uri patch to fix this issue. thanks rvsw for the report. 2014-01-23 12:06:48 -08:00
75 changed files with 10101 additions and 865 deletions

View File

@ -3,6 +3,17 @@ Name
ngx_openresty - Turning Nginx into a full-fledged Web App Server
Table of Contents
=================
* [Name](#name)
* [Description](#description)
* [For Users](#for-users)
* [For Bundle Maintainers](#for-bundle-maintainers)
* [Mailing List](#mailing-list)
* [Report Bugs](#report-bugs)
* [Copyright & License](#copyright--license)
Description
===========
@ -29,7 +40,7 @@ For Bundle Maintainers
The bundle's source is at the following git repository:
https://github.com/agentzh/ngx_openresty
https://github.com/agentzh/ngx_openresty
To reproduce the bundle tarball, just do
@ -37,30 +48,36 @@ To reproduce the bundle tarball, just do
at the top of the bundle source tree.
[Back to TOC](#table-of-contents)
Mailing List
============
You're very welcome to join the English OpenResty mailing list hosted on Google Groups:
https://groups.google.com/group/openresty-en
https://groups.google.com/group/openresty-en
The Chinese mailing list is here:
https://groups.google.com/group/openresty
https://groups.google.com/group/openresty
[Back to TOC](#table-of-contents)
Report Bugs
===========
You're very welcome to report issues on GitHub:
https://github.com/agentzh/ngx_openresty/issues
https://github.com/agentzh/ngx_openresty/issues
[Back to TOC](#table-of-contents)
Copyright & License
===================
The bundle itself is licensed under the 2-clause BSD license.
Copyright (c) 2011-2013, Yichun "agentzh" Zhang (章亦春) <agentzh@gmail.com>, CloudFlare Inc.
Copyright (c) 2011-2014, Yichun "agentzh" Zhang (章亦春) <agentzh@gmail.com>, CloudFlare Inc.
This module is licensed under the terms of the BSD license.
@ -83,3 +100,5 @@ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
[Back to TOC](#table-of-contents)

View File

@ -0,0 +1,22 @@
--- nginx-1.5.11/src/http/ngx_http_file_cache.c 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.5.11-patched/src/http/ngx_http_file_cache.c 2013-10-26 14:47:56.184041728 -0700
@@ -432,6 +432,7 @@ ngx_http_file_cache_lock_wait_handler(ng
ngx_uint_t wait;
ngx_msec_t timer;
ngx_http_cache_t *c;
+ ngx_connection_t *conn;
ngx_http_request_t *r;
ngx_http_file_cache_t *cache;
@@ -471,7 +472,10 @@ wakeup:
c->waiting = 0;
r->main->blocked--;
- r->connection->write->handler(r->connection->write);
+
+ conn = r->connection;
+ r->write_event_handler(r);
+ ngx_http_run_posted_requests(conn);
}

View File

@ -0,0 +1,19 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1383598130 28800
# Node ID f64218e1ac963337d84092536f588b8e0d99bbaa
# Parent dea321e5c0216efccbb23e84bbce7cf3e28f130c
Cache: gracefully exit the cache manager process.
diff -r dea321e5c021 -r f64218e1ac96 src/os/unix/ngx_process_cycle.c
--- a/src/os/unix/ngx_process_cycle.c Thu Oct 31 18:23:49 2013 +0400
+++ b/src/os/unix/ngx_process_cycle.c Mon Nov 04 12:48:50 2013 -0800
@@ -1335,7 +1335,7 @@
if (ngx_terminate || ngx_quit) {
ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
- exit(0);
+ ngx_worker_process_exit(cycle);
}
if (ngx_reopen) {

View File

@ -0,0 +1,13 @@
--- src/http/modules/ngx_http_proxy_module.c
+++ src/http/modules/ngx_http_proxy_module.c
@@ -1865,6 +1865,10 @@ data:
}
+ if (ctx->size < 0 || ctx->length < 0) {
+ goto invalid;
+ }
+
return rc;
done:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,11 @@
--- nginx-1.5.11/src/http/ngx_http_request.c 2013-05-06 03:26:50.000000000 -0700
+++ nginx-1.5.11-patched/src/http/ngx_http_request.c 2013-06-11 12:59:48.008321688 -0700
@@ -1951,7 +1951,7 @@
ngx_int_t rc;
ngx_http_connection_t *hc;
ngx_http_core_loc_conf_t *clcf;
- ngx_http_core_srv_conf_t *cscf;
+ ngx_http_core_srv_conf_t *cscf = NULL;
hc = r->http_connection;

View File

@ -0,0 +1,13 @@
--- nginx-1.5.11/src/core/ngx_log.h 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.5.11-patched/src/core/ngx_log.h 2013-12-05 20:35:35.996236720 -0800
@@ -64,7 +64,9 @@ struct ngx_log_s {
};
-#define NGX_MAX_ERROR_STR 2048
+#ifndef NGX_MAX_ERROR_STR
+#define NGX_MAX_ERROR_STR 4096
+#endif
/*********************************/

View File

@ -0,0 +1,15 @@
--- nginx-1.5.11/src/http/modules/ngx_http_proxy_module.c 2012-04-23 18:40:01.000000000 +0800
+++ nginx-1.5.11-patched/src/http/modules/ngx_http_proxy_module.c 2012-06-24 12:48:57.289834450 +0800
@@ -3023,8 +3023,10 @@
if (conf->upstream.upstream || conf->proxy_lengths) {
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
- if (clcf->handler == NULL && clcf->lmt_excpt) {
- clcf->handler = ngx_http_proxy_handler;
+ if (clcf->handler == NULL) {
+ if (clcf->lmt_excpt) {
+ clcf->handler = ngx_http_proxy_handler;
+ }
conf->location = prev->location;
}
}

View File

@ -0,0 +1,115 @@
--- nginx-1.5.11/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
+++ nginx-1.5.11-patched/src/http/modules/ngx_http_log_module.c 2011-11-10 16:17:29.599039534 +0800
@@ -61,6 +61,8 @@
time_t open_file_cache_valid;
ngx_uint_t open_file_cache_min_uses;
+ ngx_flag_t escape_non_ascii;
+
ngx_uint_t off; /* unsigned off:1 */
} ngx_http_log_loc_conf_t;
@@ -104,7 +106,8 @@
uintptr_t data);
static u_char *ngx_http_log_variable(ngx_http_request_t *r, u_char *buf,
ngx_http_log_op_t *op);
-static uintptr_t ngx_http_log_escape(u_char *dst, u_char *src, size_t size);
+static uintptr_t ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst,
+ u_char *src, size_t size);
static void *ngx_http_log_create_main_conf(ngx_conf_t *cf);
@@ -146,6 +149,13 @@
0,
NULL },
+ { ngx_string("log_escape_non_ascii"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
+ ngx_conf_set_flag_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_log_loc_conf_t, escape_non_ascii),
+ NULL },
+
ngx_null_command
};
@@ -637,6 +647,7 @@
ngx_http_log_variable_getlen(ngx_http_request_t *r, uintptr_t data)
{
uintptr_t len;
+ ngx_http_log_loc_conf_t *lcf;
ngx_http_variable_value_t *value;
value = ngx_http_get_indexed_variable(r, data);
@@ -645,7 +656,9 @@
return 1;
}
- len = ngx_http_log_escape(NULL, value->data, value->len);
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
+
+ len = ngx_http_log_escape(lcf, NULL, value->data, value->len);
value->escape = len ? 1 : 0;
@@ -656,6 +669,7 @@
static u_char *
ngx_http_log_variable(ngx_http_request_t *r, u_char *buf, ngx_http_log_op_t *op)
{
+ ngx_http_log_loc_conf_t *lcf;
ngx_http_variable_value_t *value;
value = ngx_http_get_indexed_variable(r, op->data);
@@ -669,16 +683,18 @@
return ngx_cpymem(buf, value->data, value->len);
} else {
- return (u_char *) ngx_http_log_escape(buf, value->data, value->len);
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
+ return (u_char *) ngx_http_log_escape(lcf, buf, value->data, value->len);
}
}
static uintptr_t
-ngx_http_log_escape(u_char *dst, u_char *src, size_t size)
+ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst, u_char *src,
+ size_t size)
{
- ngx_uint_t n;
- static u_char hex[] = "0123456789ABCDEF";
+ ngx_uint_t n;
+ static u_char hex[] = "0123456789ABCDEF";
static uint32_t escape[] = {
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
@@ -698,6 +714,12 @@
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
};
+ if (lcf->escape_non_ascii) {
+ ngx_memset(&escape[4], 0xff, sizeof(uint32_t) * 4);
+
+ } else {
+ ngx_memzero(&escape[4], sizeof(uint32_t) * 4);
+ }
if (dst == NULL) {
@@ -781,6 +803,7 @@
}
conf->open_file_cache = NGX_CONF_UNSET_PTR;
+ conf->escape_non_ascii = NGX_CONF_UNSET;
return conf;
}
@@ -796,6 +819,8 @@
ngx_http_log_fmt_t *fmt;
ngx_http_log_main_conf_t *lmcf;
+ ngx_conf_merge_value(conf->escape_non_ascii, prev->escape_non_ascii, 1);
+
if (conf->open_file_cache == NGX_CONF_UNSET_PTR) {
conf->open_file_cache = prev->open_file_cache;

View File

@ -0,0 +1,36 @@
diff -urp nginx-1.5.11/auto/cc/clang nginx-1.5.11-patched/auto/cc/clang
--- nginx-1.5.11/auto/cc/clang 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.5.11-patched/auto/cc/clang 2014-03-13 20:54:26.241413360 -0700
@@ -89,7 +89,7 @@ CFLAGS="$CFLAGS -Wconditional-uninitiali
CFLAGS="$CFLAGS -Wno-unused-parameter"
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"
diff -urp nginx-1.5.11/auto/cc/gcc nginx-1.5.11-patched/auto/cc/gcc
--- nginx-1.5.11/auto/cc/gcc 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.5.11-patched/auto/cc/gcc 2014-03-13 20:54:13.301355329 -0700
@@ -168,7 +168,7 @@ esac
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"
diff -urp nginx-1.5.11/auto/cc/icc nginx-1.5.11-patched/auto/cc/icc
--- nginx-1.5.11/auto/cc/icc 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.5.11-patched/auto/cc/icc 2014-03-13 20:54:13.301355329 -0700
@@ -115,7 +115,7 @@ case "$NGX_ICC_VER" in
esac
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"

View File

@ -0,0 +1,90 @@
--- nginx-1.5.11/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
+++ nginx-1.5.11-patched/src/http/ngx_http_core_module.c 2011-01-30 19:24:34.956354518 +0800
@@ -57,6 +57,8 @@
void *conf);
static char *ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
+static char *ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd,
+ void *conf);
static char *ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
static char *ngx_http_core_open_file_cache(ngx_conf_t *cf, ngx_command_t *cmd,
@@ -614,6 +616,14 @@
0,
NULL },
+ { ngx_string("no_error_pages"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
+ |NGX_CONF_NOARGS,
+ ngx_http_core_no_error_pages,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ 0,
+ NULL },
+
{ ngx_string("try_files"),
NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_2MORE,
ngx_http_core_try_files,
@@ -3052,7 +3062,6 @@
* clcf->types = NULL;
* clcf->default_type = { 0, NULL };
* clcf->error_log = NULL;
- * clcf->error_pages = NULL;
* clcf->try_files = NULL;
* clcf->client_body_path = NULL;
* clcf->regex = NULL;
@@ -3062,6 +3071,7 @@
* clcf->gzip_proxied = 0;
*/
+ clcf->error_pages = NGX_CONF_UNSET_PTR;
clcf->client_max_body_size = NGX_CONF_UNSET;
clcf->client_body_buffer_size = NGX_CONF_UNSET_SIZE;
clcf->client_body_timeout = NGX_CONF_UNSET_MSEC;
@@ -3250,9 +3260,7 @@
}
}
- if (conf->error_pages == NULL && prev->error_pages) {
- conf->error_pages = prev->error_pages;
- }
+ ngx_conf_merge_ptr_value(conf->error_pages, prev->error_pages, NULL);
ngx_conf_merge_str_value(conf->default_type,
prev->default_type, "text/plain");
@@ -3988,6 +3996,10 @@
ngx_http_compile_complex_value_t ccv;
if (clcf->error_pages == NULL) {
+ return "conflicts with \"no_error_pages\"";
+ }
+
+ if (clcf->error_pages == NGX_CONF_UNSET_PTR) {
clcf->error_pages = ngx_array_create(cf->pool, 4,
sizeof(ngx_http_err_page_t));
if (clcf->error_pages == NULL) {
@@ -4095,6 +4107,25 @@
static char *
+ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
+{
+ ngx_http_core_loc_conf_t *clcf = conf;
+
+ if (clcf->error_pages == NULL) {
+ return "is duplicate";
+ }
+
+ if (clcf->error_pages != NGX_CONF_UNSET_PTR) {
+ return "conflicts with \"error_page\"";
+ }
+
+ clcf->error_pages = NULL;
+
+ return NGX_CONF_OK;
+}
+
+
+static char *
ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
ngx_http_core_loc_conf_t *clcf = conf;

View File

@ -0,0 +1,606 @@
diff -upr nginx-1.5.11/src/core/nginx.h nginx-1.5.11-patched/src/core/nginx.h
--- nginx-1.5.11/src/core/nginx.h 2013-05-06 03:26:50.000000000 -0700
+++ nginx-1.5.11-patched/src/core/nginx.h 2013-06-10 16:12:23.691136795 -0700
@@ -10,7 +10,7 @@
#define nginx_version 1005011
#define NGINX_VERSION "1.5.11"
-#define NGINX_VER "openresty/" NGINX_VERSION ".unknown"
+#define NGINX_VER "openresty/" NGINX_VERSION ".unknown (no pool)"
#define NGINX_VAR "NGINX"
diff -urp nginx-1.5.11/src/core/ngx_array.c nginx-1.5.11-patched/src/core/ngx_array.c
--- nginx-1.5.11/src/core/ngx_array.c 2014-01-22 05:43:00.000000000 -0800
+++ nginx-1.5.11-patched/src/core/ngx_array.c 2014-01-27 21:25:14.887049509 -0800
@@ -30,26 +30,30 @@ ngx_array_create(ngx_pool_t *p, ngx_uint
void
ngx_array_destroy(ngx_array_t *a)
{
- ngx_pool_t *p;
+ ngx_pool_t *p;
+ ngx_array_link_t *link;
p = a->pool;
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last) {
- p->d.last -= a->size * a->nalloc;
+ if (a->elts) {
+ ngx_pfree(p, a->elts);
}
- if ((u_char *) a + sizeof(ngx_array_t) == p->d.last) {
- p->d.last = (u_char *) a;
+ for (link = a->old_elts; link; link = link->next) {
+ ngx_pfree(p, link->elts);
}
+
+ ngx_pfree(p, a);
}
void *
ngx_array_push(ngx_array_t *a)
{
- void *elt, *new;
- size_t size;
- ngx_pool_t *p;
+ void *elt, *new;
+ size_t size;
+ ngx_pool_t *p;
+ ngx_array_link_t *link;
if (a->nelts == a->nalloc) {
@@ -59,29 +63,27 @@ ngx_array_push(ngx_array_t *a)
p = a->pool;
- if ((u_char *) a->elts + size == p->d.last
- && p->d.last + a->size <= p->d.end)
- {
- /*
- * the array allocation is the last in the pool
- * and there is space for new allocation
- */
-
- p->d.last += a->size;
- a->nalloc++;
-
- } else {
- /* allocate a new array */
-
- new = ngx_palloc(p, 2 * size);
- if (new == NULL) {
- return NULL;
- }
-
- ngx_memcpy(new, a->elts, size);
- a->elts = new;
- a->nalloc *= 2;
+ /* allocate a new array */
+
+ new = ngx_palloc(p, 2 * size);
+ if (new == NULL) {
+ return NULL;
+ }
+
+ ngx_memcpy(new, a->elts, size);
+
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
+ if (link == NULL) {
+ ngx_pfree(p, new);
+ return NULL;
}
+
+ link->next = a->old_elts;
+ link->elts = a->elts;
+ a->old_elts = link;
+
+ a->elts = new;
+ a->nalloc *= 2;
}
elt = (u_char *) a->elts + a->size * a->nelts;
@@ -95,11 +97,10 @@ void *
ngx_array_push_n(ngx_array_t *a, ngx_uint_t n)
{
void *elt, *new;
- size_t size;
ngx_uint_t nalloc;
ngx_pool_t *p;
- size = n * a->size;
+ ngx_array_link_t *link;
if (a->nelts + n > a->nalloc) {
@@ -107,31 +108,27 @@ ngx_array_push_n(ngx_array_t *a, ngx_uin
p = a->pool;
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last
- && p->d.last + size <= p->d.end)
- {
- /*
- * the array allocation is the last in the pool
- * and there is space for new allocation
- */
-
- p->d.last += size;
- a->nalloc += n;
-
- } else {
- /* allocate a new array */
-
- nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
-
- new = ngx_palloc(p, nalloc * a->size);
- if (new == NULL) {
- return NULL;
- }
-
- ngx_memcpy(new, a->elts, a->nelts * a->size);
- a->elts = new;
- a->nalloc = nalloc;
+ nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
+
+ new = ngx_palloc(p, nalloc * a->size);
+ if (new == NULL) {
+ return NULL;
+ }
+
+ ngx_memcpy(new, a->elts, a->nelts * a->size);
+
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
+ if (link == NULL) {
+ ngx_pfree(p, new);
+ return NULL;
}
+
+ link->next = a->old_elts;
+ link->elts = a->elts;
+ a->old_elts = link;
+
+ a->elts = new;
+ a->nalloc = nalloc;
}
elt = (u_char *) a->elts + a->size * a->nelts;
diff -urp nginx-1.5.11/src/core/ngx_array.h nginx-1.5.11-patched/src/core/ngx_array.h
--- nginx-1.5.11/src/core/ngx_array.h 2014-01-22 05:43:00.000000000 -0800
+++ nginx-1.5.11-patched/src/core/ngx_array.h 2014-01-27 21:25:14.888049518 -0800
@@ -13,12 +13,23 @@
#include <ngx_core.h>
+typedef struct ngx_array_link_s ngx_array_link_t;
+
+
+struct ngx_array_link_s {
+ void *elts;
+ ngx_array_link_t *next;
+};
+
+
typedef struct {
void *elts;
ngx_uint_t nelts;
size_t size;
ngx_uint_t nalloc;
ngx_pool_t *pool;
+
+ ngx_array_link_t *old_elts;
} ngx_array_t;
@@ -40,6 +51,7 @@ ngx_array_init(ngx_array_t *array, ngx_p
array->size = size;
array->nalloc = n;
array->pool = pool;
+ array->old_elts = NULL;
array->elts = ngx_palloc(pool, n * size);
if (array->elts == NULL) {
diff -urp nginx-1.5.11/src/core/ngx_palloc.c nginx-1.5.11-patched/src/core/ngx_palloc.c
--- nginx-1.5.11/src/core/ngx_palloc.c 2014-01-22 05:43:00.000000000 -0800
+++ nginx-1.5.11-patched/src/core/ngx_palloc.c 2014-01-27 21:42:30.905552064 -0800
@@ -9,32 +9,23 @@
#include <ngx_core.h>
-static void *ngx_palloc_block(ngx_pool_t *pool, size_t size);
-static void *ngx_palloc_large(ngx_pool_t *pool, size_t size);
-
-
ngx_pool_t *
ngx_create_pool(size_t size, ngx_log_t *log)
{
- ngx_pool_t *p;
+ ngx_pool_t *p;
- p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
+ size = sizeof(ngx_pool_t);
+ p = ngx_alloc(size, log);
if (p == NULL) {
return NULL;
}
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
- p->d.end = (u_char *) p + size;
- p->d.next = NULL;
- p->d.failed = 0;
+ ngx_memzero(p, size);
size = size - sizeof(ngx_pool_t);
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
p->current = p;
- p->chain = NULL;
- p->large = NULL;
- p->cleanup = NULL;
p->log = log;
return p;
@@ -44,8 +35,7 @@ ngx_create_pool(size_t size, ngx_log_t *
void
ngx_destroy_pool(ngx_pool_t *pool)
{
- ngx_pool_t *p, *n;
- ngx_pool_large_t *l;
+ ngx_pool_data_t *d, *n;
ngx_pool_cleanup_t *c;
for (c = pool->cleanup; c; c = c->next) {
@@ -56,13 +46,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
}
}
- for (l = pool->large; l; l = l->next) {
-
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
-
- if (l->alloc) {
- ngx_free(l->alloc);
- }
+ if (pool->d == NULL) {
+ ngx_free(pool);
+ return;
}
#if (NGX_DEBUG)
@@ -72,9 +58,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
* so we cannot use this log while free()ing the pool
*/
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
- "free: %p, unused: %uz", p, p->d.end - p->d.last);
+ "free: %p, unused: %d", d, 0);
if (n == NULL) {
break;
@@ -83,175 +69,84 @@ ngx_destroy_pool(ngx_pool_t *pool)
#endif
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
- ngx_free(p);
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
+ ngx_free(d->alloc);
+ ngx_free(d);
if (n == NULL) {
break;
}
}
-}
+ pool->d = NULL;
-void
-ngx_reset_pool(ngx_pool_t *pool)
-{
- ngx_pool_t *p;
- ngx_pool_large_t *l;
-
- for (l = pool->large; l; l = l->next) {
- if (l->alloc) {
- ngx_free(l->alloc);
- }
- }
-
- for (p = pool; p; p = p->d.next) {
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
- p->d.failed = 0;
- }
-
- pool->current = pool;
- pool->chain = NULL;
- pool->large = NULL;
+ ngx_free(pool);
}
-void *
-ngx_palloc(ngx_pool_t *pool, size_t size)
+void
+ngx_reset_pool(ngx_pool_t *pool)
{
- u_char *m;
- ngx_pool_t *p;
-
- if (size <= pool->max) {
+ ngx_pool_data_t *d, *n;
+ ngx_pool_data_t *saved = NULL;
- p = pool->current;
-
- do {
- m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT);
-
- if ((size_t) (p->d.end - m) >= size) {
- p->d.last = m + size;
-
- return m;
+ if (pool->d) {
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
+ if (d->alloc == pool->log) {
+ saved = d;
+ continue;
}
- p = p->d.next;
-
- } while (p);
-
- return ngx_palloc_block(pool, size);
- }
-
- return ngx_palloc_large(pool, size);
-}
-
-
-void *
-ngx_pnalloc(ngx_pool_t *pool, size_t size)
-{
- u_char *m;
- ngx_pool_t *p;
-
- if (size <= pool->max) {
-
- p = pool->current;
-
- do {
- m = p->d.last;
-
- if ((size_t) (p->d.end - m) >= size) {
- p->d.last = m + size;
+ ngx_free(d->alloc);
+ ngx_free(d);
- return m;
+ if (n == NULL) {
+ break;
}
+ }
- p = p->d.next;
-
- } while (p);
-
- return ngx_palloc_block(pool, size);
+ pool->d = saved;
+ pool->current = pool;
+ pool->chain = NULL;
}
-
- return ngx_palloc_large(pool, size);
}
-static void *
-ngx_palloc_block(ngx_pool_t *pool, size_t size)
+void *
+ngx_malloc(ngx_pool_t *pool, size_t size)
{
- u_char *m;
- size_t psize;
- ngx_pool_t *p, *new, *current;
+ ngx_pool_data_t *d;
+ void *p;
- psize = (size_t) (pool->d.end - (u_char *) pool);
-
- m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
- if (m == NULL) {
+ p = ngx_alloc(size, pool->log);
+ if (p == NULL) {
return NULL;
}
- new = (ngx_pool_t *) m;
-
- new->d.end = m + psize;
- new->d.next = NULL;
- new->d.failed = 0;
-
- m += sizeof(ngx_pool_data_t);
- m = ngx_align_ptr(m, NGX_ALIGNMENT);
- new->d.last = m + size;
-
- current = pool->current;
-
- for (p = current; p->d.next; p = p->d.next) {
- if (p->d.failed++ > 4) {
- current = p->d.next;
- }
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
+ if (d == NULL){
+ ngx_free(p);
+ return NULL;
}
- p->d.next = new;
-
- pool->current = current ? current : new;
-
- return m;
+ d->alloc = p;
+ d->next = pool->d;
+ pool->d = d;
+ return p;
}
-static void *
-ngx_palloc_large(ngx_pool_t *pool, size_t size)
+void *
+ngx_palloc(ngx_pool_t *pool, size_t size)
{
- void *p;
- ngx_uint_t n;
- ngx_pool_large_t *large;
-
- p = ngx_alloc(size, pool->log);
- if (p == NULL) {
- return NULL;
- }
-
- n = 0;
-
- for (large = pool->large; large; large = large->next) {
- if (large->alloc == NULL) {
- large->alloc = p;
- return p;
- }
-
- if (n++ > 3) {
- break;
- }
- }
-
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
- if (large == NULL) {
- ngx_free(p);
- return NULL;
- }
+ return ngx_malloc(pool, size);
+}
- large->alloc = p;
- large->next = pool->large;
- pool->large = large;
- return p;
+void *
+ngx_pnalloc(ngx_pool_t *pool, size_t size)
+{
+ return ngx_malloc(pool, size);
}
@@ -259,38 +154,48 @@ void *
ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment)
{
void *p;
- ngx_pool_large_t *large;
+ ngx_pool_data_t *d;
p = ngx_memalign(alignment, size, pool->log);
if (p == NULL) {
return NULL;
}
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
- if (large == NULL) {
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
+ if (d == NULL){
ngx_free(p);
return NULL;
}
- large->alloc = p;
- large->next = pool->large;
- pool->large = large;
-
+ d->alloc = p;
+ d->next = pool->d;
+ pool->d = d;
return p;
}
ngx_int_t
-ngx_pfree(ngx_pool_t *pool, void *p)
+ngx_pfree(ngx_pool_t *pool, void *data)
{
- ngx_pool_large_t *l;
+ ngx_pool_data_t *p, *d;
- for (l = pool->large; l; l = l->next) {
- if (p == l->alloc) {
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
- "free: %p", l->alloc);
- ngx_free(l->alloc);
- l->alloc = NULL;
+ p = NULL;
+ for (d = pool->d; d; p = d, d = d->next) {
+ if (data == d->alloc) {
+
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", d->alloc);
+
+ ngx_free(d->alloc);
+ d->alloc = NULL;
+
+ if (p) {
+ p->next = d->next;
+
+ } else {
+ pool->d = d->next;
+ }
+
+ ngx_free(d);
return NGX_OK;
}
diff -urp nginx-1.5.11/src/core/ngx_palloc.h nginx-1.5.11-patched/src/core/ngx_palloc.h
--- nginx-1.5.11/src/core/ngx_palloc.h 2014-01-22 05:43:00.000000000 -0800
+++ nginx-1.5.11-patched/src/core/ngx_palloc.h 2014-01-27 21:25:14.911049721 -0800
@@ -38,28 +38,21 @@ struct ngx_pool_cleanup_s {
};
-typedef struct ngx_pool_large_s ngx_pool_large_t;
-
-struct ngx_pool_large_s {
- ngx_pool_large_t *next;
- void *alloc;
-};
+typedef struct ngx_pool_data_s ngx_pool_large_t;
+typedef struct ngx_pool_data_s ngx_pool_data_t;
-typedef struct {
- u_char *last;
- u_char *end;
- ngx_pool_t *next;
- ngx_uint_t failed;
-} ngx_pool_data_t;
+struct ngx_pool_data_s {
+ ngx_pool_data_t *next;
+ void *alloc;
+};
struct ngx_pool_s {
- ngx_pool_data_t d;
+ ngx_pool_data_t *d;
size_t max;
ngx_pool_t *current;
ngx_chain_t *chain;
- ngx_pool_large_t *large;
ngx_pool_cleanup_t *cleanup;
ngx_log_t *log;
};

View File

@ -0,0 +1,26 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1386694955 28800
# Node ID 9ba6b149669f1f02eeb4cdc0ebd364a949b5c469
# Parent 30e806b8636af5fd3f03ec17df24801f390f7511
Configure: added new option --with-pcre-conf-opt=OPTIONS.
diff -r 30e806b8636a -r 9ba6b149669f auto/options
--- a/auto/options Mon Dec 09 10:16:44 2013 +0400
+++ b/auto/options Tue Dec 10 09:02:35 2013 -0800
@@ -286,6 +286,7 @@
--with-pcre) USE_PCRE=YES ;;
--with-pcre=*) PCRE="$value" ;;
--with-pcre-opt=*) PCRE_OPT="$value" ;;
+ --with-pcre-conf-opt=*) PCRE_CONF_OPT="$value" ;;
--with-pcre-jit) PCRE_JIT=YES ;;
--with-openssl=*) OPENSSL="$value" ;;
@@ -441,6 +442,7 @@
--with-pcre force PCRE library usage
--with-pcre=DIR set path to PCRE library sources
--with-pcre-opt=OPTIONS set additional build options for PCRE
+ --with-pcre-conf-opt=OPTIONS set additional configure options for PCRE
--with-pcre-jit build PCRE with JIT compilation support
--with-md5=DIR set path to md5 library sources

View File

@ -0,0 +1,15 @@
--- nginx-1.5.11/src/http/modules/ngx_http_proxy_module.c 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.5.11-patched/src/http/modules/ngx_http_proxy_module.c 2013-10-27 15:29:41.619378592 -0700
@@ -602,10 +602,10 @@ static ngx_keyval_t ngx_http_proxy_cach
static ngx_http_variable_t ngx_http_proxy_vars[] = {
{ ngx_string("proxy_host"), NULL, ngx_http_proxy_host_variable, 0,
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("proxy_port"), NULL, ngx_http_proxy_port_variable, 0,
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("proxy_add_x_forwarded_for"), NULL,
ngx_http_proxy_add_x_forwarded_for_variable, 0, NGX_HTTP_VAR_NOHASH, 0 },

View File

@ -0,0 +1,24 @@
diff -ur nginx-1.5.11/src/core/nginx.h nginx-1.5.11-patched/src/core/nginx.h
--- nginx-1.5.11/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
+++ nginx-1.5.11-patched/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1005011
#define NGINX_VERSION "1.5.11"
-#define NGINX_VER "nginx/" NGINX_VERSION
+#define NGINX_VER "openresty/" NGINX_VERSION ".unknown"
#define NGINX_VAR "NGINX"
#define NGX_OLDPID_EXT ".oldbin"
diff -ur nginx-1.5.11/src/http/ngx_http_header_filter_module.c nginx-1.5.11-patched/src/http/ngx_http_header_filter_module.c
--- nginx-1.5.11/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
+++ nginx-1.5.11-patched/src/http/ngx_http_header_filter_module.c 2010-03-30 10:52:53.670909405 +0800
@@ -45,7 +45,7 @@
};
-static char ngx_http_server_string[] = "Server: nginx" CRLF;
+static char ngx_http_server_string[] = "Server: openresty" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

View File

@ -0,0 +1,44 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1390506359 28800
# Node ID 17186b98c235c07e94c64e5853689f790f173756
# Parent 4b50d1f299d8a69f3e3f7975132e1490352642fe
Variable: setting $args should invalidate unparsed uri.
diff -r 4b50d1f299d8 -r 17186b98c235 src/http/ngx_http_variables.c
--- a/src/http/ngx_http_variables.c Fri Jan 10 11:22:14 2014 -0800
+++ b/src/http/ngx_http_variables.c Thu Jan 23 11:45:59 2014 -0800
@@ -15,6 +15,8 @@
ngx_http_variable_value_t *v, uintptr_t data);
static void ngx_http_variable_request_set(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
+static void ngx_http_variable_request_args_set(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_variable_request_get_size(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
static void ngx_http_variable_request_set_size(ngx_http_request_t *r,
@@ -218,7 +220,7 @@
NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("args"),
- ngx_http_variable_request_set,
+ ngx_http_variable_request_args_set,
ngx_http_variable_request,
offsetof(ngx_http_request_t, args),
NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
@@ -647,6 +649,15 @@
static void
+ngx_http_variable_request_args_set(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data)
+{
+ r->valid_unparsed_uri = 0;
+ ngx_http_variable_request_set(r, v, data);
+}
+
+
+static void
ngx_http_variable_request_set(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{

View File

@ -0,0 +1,11 @@
--- nginx-1.5.11/src/core/ngx_slab.c 2012-09-24 11:34:04.000000000 -0700
+++ nginx-1.5.11-patched/src/core/ngx_slab.c 2012-12-05 20:47:07.296694952 -0800
@@ -657,7 +657,7 @@ ngx_slab_alloc_pages(ngx_slab_pool_t *po
}
}
- ngx_slab_error(pool, NGX_LOG_CRIT, "ngx_slab_alloc() failed: no memory");
+ ngx_slab_error(pool, NGX_LOG_INFO, "ngx_slab_alloc() failed: no memory");
return NULL;
}

View File

@ -0,0 +1,40 @@
diff -rudp nginx-1.5.11/src/http/ngx_http_upstream.c nginx-1.5.11-patched/src/http/ngx_http_upstream.c
--- nginx-1.5.11/src/http/ngx_http_upstream.c 2012-08-06 10:34:08.000000000 -0700
+++ nginx-1.5.11-patched/src/http/ngx_http_upstream.c 2012-12-05 14:46:41.741173058 -0800
@@ -1216,6 +1216,7 @@ ngx_http_upstream_connect(ngx_http_reque
}
u->request_sent = 0;
+ u->request_all_sent = 0;
if (rc == NGX_AGAIN) {
ngx_add_timer(c->write, u->conf->connect_timeout);
@@ -1418,6 +1419,8 @@ ngx_http_upstream_send_request(ngx_http_
/* rc == NGX_OK */
+ u->request_all_sent = 1;
+
if (c->tcp_nopush == NGX_TCP_NOPUSH_SET) {
if (ngx_tcp_push(c->fd) == NGX_ERROR) {
ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
@@ -1484,7 +1487,7 @@ ngx_http_upstream_send_request_handler(n
#endif
- if (u->header_sent) {
+ if (u->request_all_sent) {
u->write_event_handler = ngx_http_upstream_dummy_handler;
(void) ngx_handle_write_event(c->write, 0);
diff -rudp nginx-1.5.11/src/http/ngx_http_upstream.h nginx-1.5.11-patched/src/http/ngx_http_upstream.h
--- nginx-1.5.11/src/http/ngx_http_upstream.h 2012-02-13 03:01:58.000000000 -0800
+++ nginx-1.5.11-patched/src/http/ngx_http_upstream.h 2012-12-05 14:41:09.763514741 -0800
@@ -324,6 +324,7 @@ struct ngx_http_upstream_s {
unsigned keepalive:1;
unsigned request_sent:1;
+ unsigned request_all_sent:1;
unsigned header_sent:1;
};

View File

@ -0,0 +1,22 @@
--- nginx-1.5.12/src/http/ngx_http_file_cache.c 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.5.12-patched/src/http/ngx_http_file_cache.c 2013-10-26 14:47:56.184041728 -0700
@@ -432,6 +432,7 @@ ngx_http_file_cache_lock_wait_handler(ng
ngx_uint_t wait;
ngx_msec_t timer;
ngx_http_cache_t *c;
+ ngx_connection_t *conn;
ngx_http_request_t *r;
ngx_http_file_cache_t *cache;
@@ -471,7 +472,10 @@ wakeup:
c->waiting = 0;
r->main->blocked--;
- r->connection->write->handler(r->connection->write);
+
+ conn = r->connection;
+ r->write_event_handler(r);
+ ngx_http_run_posted_requests(conn);
}

View File

@ -0,0 +1,19 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1383598130 28800
# Node ID f64218e1ac963337d84092536f588b8e0d99bbaa
# Parent dea321e5c0216efccbb23e84bbce7cf3e28f130c
Cache: gracefully exit the cache manager process.
diff -r dea321e5c021 -r f64218e1ac96 src/os/unix/ngx_process_cycle.c
--- a/src/os/unix/ngx_process_cycle.c Thu Oct 31 18:23:49 2013 +0400
+++ b/src/os/unix/ngx_process_cycle.c Mon Nov 04 12:48:50 2013 -0800
@@ -1335,7 +1335,7 @@
if (ngx_terminate || ngx_quit) {
ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
- exit(0);
+ ngx_worker_process_exit(cycle);
}
if (ngx_reopen) {

View File

@ -0,0 +1,13 @@
--- src/http/modules/ngx_http_proxy_module.c
+++ src/http/modules/ngx_http_proxy_module.c
@@ -1865,6 +1865,10 @@ data:
}
+ if (ctx->size < 0 || ctx->length < 0) {
+ goto invalid;
+ }
+
return rc;
done:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,11 @@
--- nginx-1.5.12/src/http/ngx_http_request.c 2013-05-06 03:26:50.000000000 -0700
+++ nginx-1.5.12-patched/src/http/ngx_http_request.c 2013-06-11 12:59:48.008321688 -0700
@@ -1951,7 +1951,7 @@
ngx_int_t rc;
ngx_http_connection_t *hc;
ngx_http_core_loc_conf_t *clcf;
- ngx_http_core_srv_conf_t *cscf;
+ ngx_http_core_srv_conf_t *cscf = NULL;
hc = r->http_connection;

View File

@ -0,0 +1,13 @@
--- nginx-1.5.12/src/core/ngx_log.h 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.5.12-patched/src/core/ngx_log.h 2013-12-05 20:35:35.996236720 -0800
@@ -64,7 +64,9 @@ struct ngx_log_s {
};
-#define NGX_MAX_ERROR_STR 2048
+#ifndef NGX_MAX_ERROR_STR
+#define NGX_MAX_ERROR_STR 4096
+#endif
/*********************************/

View File

@ -0,0 +1,15 @@
--- nginx-1.5.12/src/http/modules/ngx_http_proxy_module.c 2012-04-23 18:40:01.000000000 +0800
+++ nginx-1.5.12-patched/src/http/modules/ngx_http_proxy_module.c 2012-06-24 12:48:57.289834450 +0800
@@ -3023,8 +3023,10 @@
if (conf->upstream.upstream || conf->proxy_lengths) {
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
- if (clcf->handler == NULL && clcf->lmt_excpt) {
- clcf->handler = ngx_http_proxy_handler;
+ if (clcf->handler == NULL) {
+ if (clcf->lmt_excpt) {
+ clcf->handler = ngx_http_proxy_handler;
+ }
conf->location = prev->location;
}
}

View File

@ -0,0 +1,115 @@
--- nginx-1.5.12/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
+++ nginx-1.5.12-patched/src/http/modules/ngx_http_log_module.c 2011-11-10 16:17:29.599039534 +0800
@@ -61,6 +61,8 @@
time_t open_file_cache_valid;
ngx_uint_t open_file_cache_min_uses;
+ ngx_flag_t escape_non_ascii;
+
ngx_uint_t off; /* unsigned off:1 */
} ngx_http_log_loc_conf_t;
@@ -104,7 +106,8 @@
uintptr_t data);
static u_char *ngx_http_log_variable(ngx_http_request_t *r, u_char *buf,
ngx_http_log_op_t *op);
-static uintptr_t ngx_http_log_escape(u_char *dst, u_char *src, size_t size);
+static uintptr_t ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst,
+ u_char *src, size_t size);
static void *ngx_http_log_create_main_conf(ngx_conf_t *cf);
@@ -146,6 +149,13 @@
0,
NULL },
+ { ngx_string("log_escape_non_ascii"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
+ ngx_conf_set_flag_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_log_loc_conf_t, escape_non_ascii),
+ NULL },
+
ngx_null_command
};
@@ -637,6 +647,7 @@
ngx_http_log_variable_getlen(ngx_http_request_t *r, uintptr_t data)
{
uintptr_t len;
+ ngx_http_log_loc_conf_t *lcf;
ngx_http_variable_value_t *value;
value = ngx_http_get_indexed_variable(r, data);
@@ -645,7 +656,9 @@
return 1;
}
- len = ngx_http_log_escape(NULL, value->data, value->len);
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
+
+ len = ngx_http_log_escape(lcf, NULL, value->data, value->len);
value->escape = len ? 1 : 0;
@@ -656,6 +669,7 @@
static u_char *
ngx_http_log_variable(ngx_http_request_t *r, u_char *buf, ngx_http_log_op_t *op)
{
+ ngx_http_log_loc_conf_t *lcf;
ngx_http_variable_value_t *value;
value = ngx_http_get_indexed_variable(r, op->data);
@@ -669,16 +683,18 @@
return ngx_cpymem(buf, value->data, value->len);
} else {
- return (u_char *) ngx_http_log_escape(buf, value->data, value->len);
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
+ return (u_char *) ngx_http_log_escape(lcf, buf, value->data, value->len);
}
}
static uintptr_t
-ngx_http_log_escape(u_char *dst, u_char *src, size_t size)
+ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst, u_char *src,
+ size_t size)
{
- ngx_uint_t n;
- static u_char hex[] = "0123456789ABCDEF";
+ ngx_uint_t n;
+ static u_char hex[] = "0123456789ABCDEF";
static uint32_t escape[] = {
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
@@ -698,6 +714,12 @@
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
};
+ if (lcf->escape_non_ascii) {
+ ngx_memset(&escape[4], 0xff, sizeof(uint32_t) * 4);
+
+ } else {
+ ngx_memzero(&escape[4], sizeof(uint32_t) * 4);
+ }
if (dst == NULL) {
@@ -781,6 +803,7 @@
}
conf->open_file_cache = NGX_CONF_UNSET_PTR;
+ conf->escape_non_ascii = NGX_CONF_UNSET;
return conf;
}
@@ -796,6 +819,8 @@
ngx_http_log_fmt_t *fmt;
ngx_http_log_main_conf_t *lmcf;
+ ngx_conf_merge_value(conf->escape_non_ascii, prev->escape_non_ascii, 1);
+
if (conf->open_file_cache == NGX_CONF_UNSET_PTR) {
conf->open_file_cache = prev->open_file_cache;

View File

@ -0,0 +1,36 @@
diff -urp nginx-1.5.12/auto/cc/clang nginx-1.5.12-patched/auto/cc/clang
--- nginx-1.5.12/auto/cc/clang 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.5.12-patched/auto/cc/clang 2014-03-13 20:54:26.241413360 -0700
@@ -89,7 +89,7 @@ CFLAGS="$CFLAGS -Wconditional-uninitiali
CFLAGS="$CFLAGS -Wno-unused-parameter"
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"
diff -urp nginx-1.5.12/auto/cc/gcc nginx-1.5.12-patched/auto/cc/gcc
--- nginx-1.5.12/auto/cc/gcc 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.5.12-patched/auto/cc/gcc 2014-03-13 20:54:13.301355329 -0700
@@ -168,7 +168,7 @@ esac
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"
diff -urp nginx-1.5.12/auto/cc/icc nginx-1.5.12-patched/auto/cc/icc
--- nginx-1.5.12/auto/cc/icc 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.5.12-patched/auto/cc/icc 2014-03-13 20:54:13.301355329 -0700
@@ -115,7 +115,7 @@ case "$NGX_ICC_VER" in
esac
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"

View File

@ -0,0 +1,90 @@
--- nginx-1.5.12/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
+++ nginx-1.5.12-patched/src/http/ngx_http_core_module.c 2011-01-30 19:24:34.956354518 +0800
@@ -57,6 +57,8 @@
void *conf);
static char *ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
+static char *ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd,
+ void *conf);
static char *ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
static char *ngx_http_core_open_file_cache(ngx_conf_t *cf, ngx_command_t *cmd,
@@ -614,6 +616,14 @@
0,
NULL },
+ { ngx_string("no_error_pages"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
+ |NGX_CONF_NOARGS,
+ ngx_http_core_no_error_pages,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ 0,
+ NULL },
+
{ ngx_string("try_files"),
NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_2MORE,
ngx_http_core_try_files,
@@ -3052,7 +3062,6 @@
* clcf->types = NULL;
* clcf->default_type = { 0, NULL };
* clcf->error_log = NULL;
- * clcf->error_pages = NULL;
* clcf->try_files = NULL;
* clcf->client_body_path = NULL;
* clcf->regex = NULL;
@@ -3062,6 +3071,7 @@
* clcf->gzip_proxied = 0;
*/
+ clcf->error_pages = NGX_CONF_UNSET_PTR;
clcf->client_max_body_size = NGX_CONF_UNSET;
clcf->client_body_buffer_size = NGX_CONF_UNSET_SIZE;
clcf->client_body_timeout = NGX_CONF_UNSET_MSEC;
@@ -3250,9 +3260,7 @@
}
}
- if (conf->error_pages == NULL && prev->error_pages) {
- conf->error_pages = prev->error_pages;
- }
+ ngx_conf_merge_ptr_value(conf->error_pages, prev->error_pages, NULL);
ngx_conf_merge_str_value(conf->default_type,
prev->default_type, "text/plain");
@@ -3988,6 +3996,10 @@
ngx_http_compile_complex_value_t ccv;
if (clcf->error_pages == NULL) {
+ return "conflicts with \"no_error_pages\"";
+ }
+
+ if (clcf->error_pages == NGX_CONF_UNSET_PTR) {
clcf->error_pages = ngx_array_create(cf->pool, 4,
sizeof(ngx_http_err_page_t));
if (clcf->error_pages == NULL) {
@@ -4095,6 +4107,25 @@
static char *
+ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
+{
+ ngx_http_core_loc_conf_t *clcf = conf;
+
+ if (clcf->error_pages == NULL) {
+ return "is duplicate";
+ }
+
+ if (clcf->error_pages != NGX_CONF_UNSET_PTR) {
+ return "conflicts with \"error_page\"";
+ }
+
+ clcf->error_pages = NULL;
+
+ return NGX_CONF_OK;
+}
+
+
+static char *
ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
ngx_http_core_loc_conf_t *clcf = conf;

View File

@ -0,0 +1,606 @@
diff -upr nginx-1.5.12/src/core/nginx.h nginx-1.5.12-patched/src/core/nginx.h
--- nginx-1.5.12/src/core/nginx.h 2013-05-06 03:26:50.000000000 -0700
+++ nginx-1.5.12-patched/src/core/nginx.h 2013-06-10 16:12:23.691136795 -0700
@@ -10,7 +10,7 @@
#define nginx_version 1005012
#define NGINX_VERSION "1.5.12"
-#define NGINX_VER "openresty/" NGINX_VERSION ".unknown"
+#define NGINX_VER "openresty/" NGINX_VERSION ".unknown (no pool)"
#define NGINX_VAR "NGINX"
diff -urp nginx-1.5.12/src/core/ngx_array.c nginx-1.5.12-patched/src/core/ngx_array.c
--- nginx-1.5.12/src/core/ngx_array.c 2014-01-22 05:43:00.000000000 -0800
+++ nginx-1.5.12-patched/src/core/ngx_array.c 2014-01-27 21:25:14.887049509 -0800
@@ -30,26 +30,30 @@ ngx_array_create(ngx_pool_t *p, ngx_uint
void
ngx_array_destroy(ngx_array_t *a)
{
- ngx_pool_t *p;
+ ngx_pool_t *p;
+ ngx_array_link_t *link;
p = a->pool;
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last) {
- p->d.last -= a->size * a->nalloc;
+ if (a->elts) {
+ ngx_pfree(p, a->elts);
}
- if ((u_char *) a + sizeof(ngx_array_t) == p->d.last) {
- p->d.last = (u_char *) a;
+ for (link = a->old_elts; link; link = link->next) {
+ ngx_pfree(p, link->elts);
}
+
+ ngx_pfree(p, a);
}
void *
ngx_array_push(ngx_array_t *a)
{
- void *elt, *new;
- size_t size;
- ngx_pool_t *p;
+ void *elt, *new;
+ size_t size;
+ ngx_pool_t *p;
+ ngx_array_link_t *link;
if (a->nelts == a->nalloc) {
@@ -59,29 +63,27 @@ ngx_array_push(ngx_array_t *a)
p = a->pool;
- if ((u_char *) a->elts + size == p->d.last
- && p->d.last + a->size <= p->d.end)
- {
- /*
- * the array allocation is the last in the pool
- * and there is space for new allocation
- */
-
- p->d.last += a->size;
- a->nalloc++;
-
- } else {
- /* allocate a new array */
-
- new = ngx_palloc(p, 2 * size);
- if (new == NULL) {
- return NULL;
- }
-
- ngx_memcpy(new, a->elts, size);
- a->elts = new;
- a->nalloc *= 2;
+ /* allocate a new array */
+
+ new = ngx_palloc(p, 2 * size);
+ if (new == NULL) {
+ return NULL;
+ }
+
+ ngx_memcpy(new, a->elts, size);
+
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
+ if (link == NULL) {
+ ngx_pfree(p, new);
+ return NULL;
}
+
+ link->next = a->old_elts;
+ link->elts = a->elts;
+ a->old_elts = link;
+
+ a->elts = new;
+ a->nalloc *= 2;
}
elt = (u_char *) a->elts + a->size * a->nelts;
@@ -95,11 +97,10 @@ void *
ngx_array_push_n(ngx_array_t *a, ngx_uint_t n)
{
void *elt, *new;
- size_t size;
ngx_uint_t nalloc;
ngx_pool_t *p;
- size = n * a->size;
+ ngx_array_link_t *link;
if (a->nelts + n > a->nalloc) {
@@ -107,31 +108,27 @@ ngx_array_push_n(ngx_array_t *a, ngx_uin
p = a->pool;
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last
- && p->d.last + size <= p->d.end)
- {
- /*
- * the array allocation is the last in the pool
- * and there is space for new allocation
- */
-
- p->d.last += size;
- a->nalloc += n;
-
- } else {
- /* allocate a new array */
-
- nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
-
- new = ngx_palloc(p, nalloc * a->size);
- if (new == NULL) {
- return NULL;
- }
-
- ngx_memcpy(new, a->elts, a->nelts * a->size);
- a->elts = new;
- a->nalloc = nalloc;
+ nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
+
+ new = ngx_palloc(p, nalloc * a->size);
+ if (new == NULL) {
+ return NULL;
+ }
+
+ ngx_memcpy(new, a->elts, a->nelts * a->size);
+
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
+ if (link == NULL) {
+ ngx_pfree(p, new);
+ return NULL;
}
+
+ link->next = a->old_elts;
+ link->elts = a->elts;
+ a->old_elts = link;
+
+ a->elts = new;
+ a->nalloc = nalloc;
}
elt = (u_char *) a->elts + a->size * a->nelts;
diff -urp nginx-1.5.12/src/core/ngx_array.h nginx-1.5.12-patched/src/core/ngx_array.h
--- nginx-1.5.12/src/core/ngx_array.h 2014-01-22 05:43:00.000000000 -0800
+++ nginx-1.5.12-patched/src/core/ngx_array.h 2014-01-27 21:25:14.888049518 -0800
@@ -13,12 +13,23 @@
#include <ngx_core.h>
+typedef struct ngx_array_link_s ngx_array_link_t;
+
+
+struct ngx_array_link_s {
+ void *elts;
+ ngx_array_link_t *next;
+};
+
+
typedef struct {
void *elts;
ngx_uint_t nelts;
size_t size;
ngx_uint_t nalloc;
ngx_pool_t *pool;
+
+ ngx_array_link_t *old_elts;
} ngx_array_t;
@@ -40,6 +51,7 @@ ngx_array_init(ngx_array_t *array, ngx_p
array->size = size;
array->nalloc = n;
array->pool = pool;
+ array->old_elts = NULL;
array->elts = ngx_palloc(pool, n * size);
if (array->elts == NULL) {
diff -urp nginx-1.5.12/src/core/ngx_palloc.c nginx-1.5.12-patched/src/core/ngx_palloc.c
--- nginx-1.5.12/src/core/ngx_palloc.c 2014-01-22 05:43:00.000000000 -0800
+++ nginx-1.5.12-patched/src/core/ngx_palloc.c 2014-01-27 21:42:30.905552064 -0800
@@ -9,32 +9,23 @@
#include <ngx_core.h>
-static void *ngx_palloc_block(ngx_pool_t *pool, size_t size);
-static void *ngx_palloc_large(ngx_pool_t *pool, size_t size);
-
-
ngx_pool_t *
ngx_create_pool(size_t size, ngx_log_t *log)
{
- ngx_pool_t *p;
+ ngx_pool_t *p;
- p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
+ size = sizeof(ngx_pool_t);
+ p = ngx_alloc(size, log);
if (p == NULL) {
return NULL;
}
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
- p->d.end = (u_char *) p + size;
- p->d.next = NULL;
- p->d.failed = 0;
+ ngx_memzero(p, size);
size = size - sizeof(ngx_pool_t);
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
p->current = p;
- p->chain = NULL;
- p->large = NULL;
- p->cleanup = NULL;
p->log = log;
return p;
@@ -44,8 +35,7 @@ ngx_create_pool(size_t size, ngx_log_t *
void
ngx_destroy_pool(ngx_pool_t *pool)
{
- ngx_pool_t *p, *n;
- ngx_pool_large_t *l;
+ ngx_pool_data_t *d, *n;
ngx_pool_cleanup_t *c;
for (c = pool->cleanup; c; c = c->next) {
@@ -56,13 +46,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
}
}
- for (l = pool->large; l; l = l->next) {
-
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
-
- if (l->alloc) {
- ngx_free(l->alloc);
- }
+ if (pool->d == NULL) {
+ ngx_free(pool);
+ return;
}
#if (NGX_DEBUG)
@@ -72,9 +58,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
* so we cannot use this log while free()ing the pool
*/
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
- "free: %p, unused: %uz", p, p->d.end - p->d.last);
+ "free: %p, unused: %d", d, 0);
if (n == NULL) {
break;
@@ -83,175 +69,84 @@ ngx_destroy_pool(ngx_pool_t *pool)
#endif
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
- ngx_free(p);
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
+ ngx_free(d->alloc);
+ ngx_free(d);
if (n == NULL) {
break;
}
}
-}
+ pool->d = NULL;
-void
-ngx_reset_pool(ngx_pool_t *pool)
-{
- ngx_pool_t *p;
- ngx_pool_large_t *l;
-
- for (l = pool->large; l; l = l->next) {
- if (l->alloc) {
- ngx_free(l->alloc);
- }
- }
-
- for (p = pool; p; p = p->d.next) {
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
- p->d.failed = 0;
- }
-
- pool->current = pool;
- pool->chain = NULL;
- pool->large = NULL;
+ ngx_free(pool);
}
-void *
-ngx_palloc(ngx_pool_t *pool, size_t size)
+void
+ngx_reset_pool(ngx_pool_t *pool)
{
- u_char *m;
- ngx_pool_t *p;
-
- if (size <= pool->max) {
+ ngx_pool_data_t *d, *n;
+ ngx_pool_data_t *saved = NULL;
- p = pool->current;
-
- do {
- m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT);
-
- if ((size_t) (p->d.end - m) >= size) {
- p->d.last = m + size;
-
- return m;
+ if (pool->d) {
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
+ if (d->alloc == pool->log) {
+ saved = d;
+ continue;
}
- p = p->d.next;
-
- } while (p);
-
- return ngx_palloc_block(pool, size);
- }
-
- return ngx_palloc_large(pool, size);
-}
-
-
-void *
-ngx_pnalloc(ngx_pool_t *pool, size_t size)
-{
- u_char *m;
- ngx_pool_t *p;
-
- if (size <= pool->max) {
-
- p = pool->current;
-
- do {
- m = p->d.last;
-
- if ((size_t) (p->d.end - m) >= size) {
- p->d.last = m + size;
+ ngx_free(d->alloc);
+ ngx_free(d);
- return m;
+ if (n == NULL) {
+ break;
}
+ }
- p = p->d.next;
-
- } while (p);
-
- return ngx_palloc_block(pool, size);
+ pool->d = saved;
+ pool->current = pool;
+ pool->chain = NULL;
}
-
- return ngx_palloc_large(pool, size);
}
-static void *
-ngx_palloc_block(ngx_pool_t *pool, size_t size)
+void *
+ngx_malloc(ngx_pool_t *pool, size_t size)
{
- u_char *m;
- size_t psize;
- ngx_pool_t *p, *new, *current;
+ ngx_pool_data_t *d;
+ void *p;
- psize = (size_t) (pool->d.end - (u_char *) pool);
-
- m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
- if (m == NULL) {
+ p = ngx_alloc(size, pool->log);
+ if (p == NULL) {
return NULL;
}
- new = (ngx_pool_t *) m;
-
- new->d.end = m + psize;
- new->d.next = NULL;
- new->d.failed = 0;
-
- m += sizeof(ngx_pool_data_t);
- m = ngx_align_ptr(m, NGX_ALIGNMENT);
- new->d.last = m + size;
-
- current = pool->current;
-
- for (p = current; p->d.next; p = p->d.next) {
- if (p->d.failed++ > 4) {
- current = p->d.next;
- }
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
+ if (d == NULL){
+ ngx_free(p);
+ return NULL;
}
- p->d.next = new;
-
- pool->current = current ? current : new;
-
- return m;
+ d->alloc = p;
+ d->next = pool->d;
+ pool->d = d;
+ return p;
}
-static void *
-ngx_palloc_large(ngx_pool_t *pool, size_t size)
+void *
+ngx_palloc(ngx_pool_t *pool, size_t size)
{
- void *p;
- ngx_uint_t n;
- ngx_pool_large_t *large;
-
- p = ngx_alloc(size, pool->log);
- if (p == NULL) {
- return NULL;
- }
-
- n = 0;
-
- for (large = pool->large; large; large = large->next) {
- if (large->alloc == NULL) {
- large->alloc = p;
- return p;
- }
-
- if (n++ > 3) {
- break;
- }
- }
-
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
- if (large == NULL) {
- ngx_free(p);
- return NULL;
- }
+ return ngx_malloc(pool, size);
+}
- large->alloc = p;
- large->next = pool->large;
- pool->large = large;
- return p;
+void *
+ngx_pnalloc(ngx_pool_t *pool, size_t size)
+{
+ return ngx_malloc(pool, size);
}
@@ -259,38 +154,48 @@ void *
ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment)
{
void *p;
- ngx_pool_large_t *large;
+ ngx_pool_data_t *d;
p = ngx_memalign(alignment, size, pool->log);
if (p == NULL) {
return NULL;
}
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
- if (large == NULL) {
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
+ if (d == NULL){
ngx_free(p);
return NULL;
}
- large->alloc = p;
- large->next = pool->large;
- pool->large = large;
-
+ d->alloc = p;
+ d->next = pool->d;
+ pool->d = d;
return p;
}
ngx_int_t
-ngx_pfree(ngx_pool_t *pool, void *p)
+ngx_pfree(ngx_pool_t *pool, void *data)
{
- ngx_pool_large_t *l;
+ ngx_pool_data_t *p, *d;
- for (l = pool->large; l; l = l->next) {
- if (p == l->alloc) {
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
- "free: %p", l->alloc);
- ngx_free(l->alloc);
- l->alloc = NULL;
+ p = NULL;
+ for (d = pool->d; d; p = d, d = d->next) {
+ if (data == d->alloc) {
+
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", d->alloc);
+
+ ngx_free(d->alloc);
+ d->alloc = NULL;
+
+ if (p) {
+ p->next = d->next;
+
+ } else {
+ pool->d = d->next;
+ }
+
+ ngx_free(d);
return NGX_OK;
}
diff -urp nginx-1.5.12/src/core/ngx_palloc.h nginx-1.5.12-patched/src/core/ngx_palloc.h
--- nginx-1.5.12/src/core/ngx_palloc.h 2014-01-22 05:43:00.000000000 -0800
+++ nginx-1.5.12-patched/src/core/ngx_palloc.h 2014-01-27 21:25:14.911049721 -0800
@@ -38,28 +38,21 @@ struct ngx_pool_cleanup_s {
};
-typedef struct ngx_pool_large_s ngx_pool_large_t;
-
-struct ngx_pool_large_s {
- ngx_pool_large_t *next;
- void *alloc;
-};
+typedef struct ngx_pool_data_s ngx_pool_large_t;
+typedef struct ngx_pool_data_s ngx_pool_data_t;
-typedef struct {
- u_char *last;
- u_char *end;
- ngx_pool_t *next;
- ngx_uint_t failed;
-} ngx_pool_data_t;
+struct ngx_pool_data_s {
+ ngx_pool_data_t *next;
+ void *alloc;
+};
struct ngx_pool_s {
- ngx_pool_data_t d;
+ ngx_pool_data_t *d;
size_t max;
ngx_pool_t *current;
ngx_chain_t *chain;
- ngx_pool_large_t *large;
ngx_pool_cleanup_t *cleanup;
ngx_log_t *log;
};

View File

@ -0,0 +1,26 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1386694955 28800
# Node ID 9ba6b149669f1f02eeb4cdc0ebd364a949b5c469
# Parent 30e806b8636af5fd3f03ec17df24801f390f7511
Configure: added new option --with-pcre-conf-opt=OPTIONS.
diff -r 30e806b8636a -r 9ba6b149669f auto/options
--- a/auto/options Mon Dec 09 10:16:44 2013 +0400
+++ b/auto/options Tue Dec 10 09:02:35 2013 -0800
@@ -286,6 +286,7 @@
--with-pcre) USE_PCRE=YES ;;
--with-pcre=*) PCRE="$value" ;;
--with-pcre-opt=*) PCRE_OPT="$value" ;;
+ --with-pcre-conf-opt=*) PCRE_CONF_OPT="$value" ;;
--with-pcre-jit) PCRE_JIT=YES ;;
--with-openssl=*) OPENSSL="$value" ;;
@@ -441,6 +442,7 @@
--with-pcre force PCRE library usage
--with-pcre=DIR set path to PCRE library sources
--with-pcre-opt=OPTIONS set additional build options for PCRE
+ --with-pcre-conf-opt=OPTIONS set additional configure options for PCRE
--with-pcre-jit build PCRE with JIT compilation support
--with-md5=DIR set path to md5 library sources

View File

@ -0,0 +1,15 @@
--- nginx-1.5.12/src/http/modules/ngx_http_proxy_module.c 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.5.12-patched/src/http/modules/ngx_http_proxy_module.c 2013-10-27 15:29:41.619378592 -0700
@@ -602,10 +602,10 @@ static ngx_keyval_t ngx_http_proxy_cach
static ngx_http_variable_t ngx_http_proxy_vars[] = {
{ ngx_string("proxy_host"), NULL, ngx_http_proxy_host_variable, 0,
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("proxy_port"), NULL, ngx_http_proxy_port_variable, 0,
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("proxy_add_x_forwarded_for"), NULL,
ngx_http_proxy_add_x_forwarded_for_variable, 0, NGX_HTTP_VAR_NOHASH, 0 },

View File

@ -0,0 +1,24 @@
diff -ur nginx-1.5.12/src/core/nginx.h nginx-1.5.12-patched/src/core/nginx.h
--- nginx-1.5.12/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
+++ nginx-1.5.12-patched/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1005012
#define NGINX_VERSION "1.5.12"
-#define NGINX_VER "nginx/" NGINX_VERSION
+#define NGINX_VER "openresty/" NGINX_VERSION ".unknown"
#define NGINX_VAR "NGINX"
#define NGX_OLDPID_EXT ".oldbin"
diff -ur nginx-1.5.12/src/http/ngx_http_header_filter_module.c nginx-1.5.12-patched/src/http/ngx_http_header_filter_module.c
--- nginx-1.5.12/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
+++ nginx-1.5.12-patched/src/http/ngx_http_header_filter_module.c 2010-03-30 10:52:53.670909405 +0800
@@ -45,7 +45,7 @@
};
-static char ngx_http_server_string[] = "Server: nginx" CRLF;
+static char ngx_http_server_string[] = "Server: openresty" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

View File

@ -0,0 +1,44 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1390506359 28800
# Node ID 17186b98c235c07e94c64e5853689f790f173756
# Parent 4b50d1f299d8a69f3e3f7975132e1490352642fe
Variable: setting $args should invalidate unparsed uri.
diff -r 4b50d1f299d8 -r 17186b98c235 src/http/ngx_http_variables.c
--- a/src/http/ngx_http_variables.c Fri Jan 10 11:22:14 2014 -0800
+++ b/src/http/ngx_http_variables.c Thu Jan 23 11:45:59 2014 -0800
@@ -15,6 +15,8 @@
ngx_http_variable_value_t *v, uintptr_t data);
static void ngx_http_variable_request_set(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
+static void ngx_http_variable_request_args_set(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_variable_request_get_size(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
static void ngx_http_variable_request_set_size(ngx_http_request_t *r,
@@ -218,7 +220,7 @@
NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("args"),
- ngx_http_variable_request_set,
+ ngx_http_variable_request_args_set,
ngx_http_variable_request,
offsetof(ngx_http_request_t, args),
NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
@@ -647,6 +649,15 @@
static void
+ngx_http_variable_request_args_set(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data)
+{
+ r->valid_unparsed_uri = 0;
+ ngx_http_variable_request_set(r, v, data);
+}
+
+
+static void
ngx_http_variable_request_set(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{

View File

@ -0,0 +1,11 @@
--- nginx-1.5.12/src/core/ngx_slab.c 2012-09-24 11:34:04.000000000 -0700
+++ nginx-1.5.12-patched/src/core/ngx_slab.c 2012-12-05 20:47:07.296694952 -0800
@@ -657,7 +657,7 @@ ngx_slab_alloc_pages(ngx_slab_pool_t *po
}
}
- ngx_slab_error(pool, NGX_LOG_CRIT, "ngx_slab_alloc() failed: no memory");
+ ngx_slab_error(pool, NGX_LOG_INFO, "ngx_slab_alloc() failed: no memory");
return NULL;
}

View File

@ -0,0 +1,40 @@
diff -rudp nginx-1.5.12/src/http/ngx_http_upstream.c nginx-1.5.12-patched/src/http/ngx_http_upstream.c
--- nginx-1.5.12/src/http/ngx_http_upstream.c 2012-08-06 10:34:08.000000000 -0700
+++ nginx-1.5.12-patched/src/http/ngx_http_upstream.c 2012-12-05 14:46:41.741173058 -0800
@@ -1216,6 +1216,7 @@ ngx_http_upstream_connect(ngx_http_reque
}
u->request_sent = 0;
+ u->request_all_sent = 0;
if (rc == NGX_AGAIN) {
ngx_add_timer(c->write, u->conf->connect_timeout);
@@ -1418,6 +1419,8 @@ ngx_http_upstream_send_request(ngx_http_
/* rc == NGX_OK */
+ u->request_all_sent = 1;
+
if (c->tcp_nopush == NGX_TCP_NOPUSH_SET) {
if (ngx_tcp_push(c->fd) == NGX_ERROR) {
ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
@@ -1484,7 +1487,7 @@ ngx_http_upstream_send_request_handler(n
#endif
- if (u->header_sent) {
+ if (u->request_all_sent) {
u->write_event_handler = ngx_http_upstream_dummy_handler;
(void) ngx_handle_write_event(c->write, 0);
diff -rudp nginx-1.5.12/src/http/ngx_http_upstream.h nginx-1.5.12-patched/src/http/ngx_http_upstream.h
--- nginx-1.5.12/src/http/ngx_http_upstream.h 2012-02-13 03:01:58.000000000 -0800
+++ nginx-1.5.12-patched/src/http/ngx_http_upstream.h 2012-12-05 14:41:09.763514741 -0800
@@ -324,6 +324,7 @@ struct ngx_http_upstream_s {
unsigned keepalive:1;
unsigned request_sent:1;
+ unsigned request_all_sent:1;
unsigned header_sent:1;
};

View File

@ -0,0 +1,44 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1390506359 28800
# Node ID 17186b98c235c07e94c64e5853689f790f173756
# Parent 4b50d1f299d8a69f3e3f7975132e1490352642fe
Variable: setting $args should invalidate unparsed uri.
diff -r 4b50d1f299d8 -r 17186b98c235 src/http/ngx_http_variables.c
--- a/src/http/ngx_http_variables.c Fri Jan 10 11:22:14 2014 -0800
+++ b/src/http/ngx_http_variables.c Thu Jan 23 11:45:59 2014 -0800
@@ -15,6 +15,8 @@
ngx_http_variable_value_t *v, uintptr_t data);
static void ngx_http_variable_request_set(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
+static void ngx_http_variable_request_args_set(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_variable_request_get_size(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
static void ngx_http_variable_request_set_size(ngx_http_request_t *r,
@@ -218,7 +220,7 @@
NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("args"),
- ngx_http_variable_request_set,
+ ngx_http_variable_request_args_set,
ngx_http_variable_request,
offsetof(ngx_http_request_t, args),
NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
@@ -647,6 +649,15 @@
static void
+ngx_http_variable_request_args_set(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data)
+{
+ r->valid_unparsed_uri = 0;
+ ngx_http_variable_request_set(r, v, data);
+}
+
+
+static void
ngx_http_variable_request_set(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{

View File

@ -0,0 +1,22 @@
--- nginx-1.5.9/src/http/ngx_http_file_cache.c 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.5.9-patched/src/http/ngx_http_file_cache.c 2013-10-26 14:47:56.184041728 -0700
@@ -432,6 +432,7 @@ ngx_http_file_cache_lock_wait_handler(ng
ngx_uint_t wait;
ngx_msec_t timer;
ngx_http_cache_t *c;
+ ngx_connection_t *conn;
ngx_http_request_t *r;
ngx_http_file_cache_t *cache;
@@ -471,7 +472,10 @@ wakeup:
c->waiting = 0;
r->main->blocked--;
- r->connection->write->handler(r->connection->write);
+
+ conn = r->connection;
+ r->write_event_handler(r);
+ ngx_http_run_posted_requests(conn);
}

View File

@ -0,0 +1,19 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1383598130 28800
# Node ID f64218e1ac963337d84092536f588b8e0d99bbaa
# Parent dea321e5c0216efccbb23e84bbce7cf3e28f130c
Cache: gracefully exit the cache manager process.
diff -r dea321e5c021 -r f64218e1ac96 src/os/unix/ngx_process_cycle.c
--- a/src/os/unix/ngx_process_cycle.c Thu Oct 31 18:23:49 2013 +0400
+++ b/src/os/unix/ngx_process_cycle.c Mon Nov 04 12:48:50 2013 -0800
@@ -1335,7 +1335,7 @@
if (ngx_terminate || ngx_quit) {
ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
- exit(0);
+ ngx_worker_process_exit(cycle);
}
if (ngx_reopen) {

View File

@ -0,0 +1,13 @@
--- src/http/modules/ngx_http_proxy_module.c
+++ src/http/modules/ngx_http_proxy_module.c
@@ -1865,6 +1865,10 @@ data:
}
+ if (ctx->size < 0 || ctx->length < 0) {
+ goto invalid;
+ }
+
return rc;
done:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,11 @@
--- nginx-1.5.9/src/http/ngx_http_request.c 2013-05-06 03:26:50.000000000 -0700
+++ nginx-1.5.9-patched/src/http/ngx_http_request.c 2013-06-11 12:59:48.008321688 -0700
@@ -1951,7 +1951,7 @@
ngx_int_t rc;
ngx_http_connection_t *hc;
ngx_http_core_loc_conf_t *clcf;
- ngx_http_core_srv_conf_t *cscf;
+ ngx_http_core_srv_conf_t *cscf = NULL;
hc = r->http_connection;

View File

@ -0,0 +1,13 @@
--- nginx-1.5.9/src/core/ngx_log.h 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.5.9-patched/src/core/ngx_log.h 2013-12-05 20:35:35.996236720 -0800
@@ -64,7 +64,9 @@ struct ngx_log_s {
};
-#define NGX_MAX_ERROR_STR 2048
+#ifndef NGX_MAX_ERROR_STR
+#define NGX_MAX_ERROR_STR 4096
+#endif
/*********************************/

View File

@ -0,0 +1,15 @@
--- nginx-1.5.9/src/http/modules/ngx_http_proxy_module.c 2012-04-23 18:40:01.000000000 +0800
+++ nginx-1.5.9-patched/src/http/modules/ngx_http_proxy_module.c 2012-06-24 12:48:57.289834450 +0800
@@ -3023,8 +3023,10 @@
if (conf->upstream.upstream || conf->proxy_lengths) {
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
- if (clcf->handler == NULL && clcf->lmt_excpt) {
- clcf->handler = ngx_http_proxy_handler;
+ if (clcf->handler == NULL) {
+ if (clcf->lmt_excpt) {
+ clcf->handler = ngx_http_proxy_handler;
+ }
conf->location = prev->location;
}
}

View File

@ -0,0 +1,115 @@
--- nginx-1.5.9/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
+++ nginx-1.5.9-patched/src/http/modules/ngx_http_log_module.c 2011-11-10 16:17:29.599039534 +0800
@@ -61,6 +61,8 @@
time_t open_file_cache_valid;
ngx_uint_t open_file_cache_min_uses;
+ ngx_flag_t escape_non_ascii;
+
ngx_uint_t off; /* unsigned off:1 */
} ngx_http_log_loc_conf_t;
@@ -104,7 +106,8 @@
uintptr_t data);
static u_char *ngx_http_log_variable(ngx_http_request_t *r, u_char *buf,
ngx_http_log_op_t *op);
-static uintptr_t ngx_http_log_escape(u_char *dst, u_char *src, size_t size);
+static uintptr_t ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst,
+ u_char *src, size_t size);
static void *ngx_http_log_create_main_conf(ngx_conf_t *cf);
@@ -146,6 +149,13 @@
0,
NULL },
+ { ngx_string("log_escape_non_ascii"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
+ ngx_conf_set_flag_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_log_loc_conf_t, escape_non_ascii),
+ NULL },
+
ngx_null_command
};
@@ -637,6 +647,7 @@
ngx_http_log_variable_getlen(ngx_http_request_t *r, uintptr_t data)
{
uintptr_t len;
+ ngx_http_log_loc_conf_t *lcf;
ngx_http_variable_value_t *value;
value = ngx_http_get_indexed_variable(r, data);
@@ -645,7 +656,9 @@
return 1;
}
- len = ngx_http_log_escape(NULL, value->data, value->len);
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
+
+ len = ngx_http_log_escape(lcf, NULL, value->data, value->len);
value->escape = len ? 1 : 0;
@@ -656,6 +669,7 @@
static u_char *
ngx_http_log_variable(ngx_http_request_t *r, u_char *buf, ngx_http_log_op_t *op)
{
+ ngx_http_log_loc_conf_t *lcf;
ngx_http_variable_value_t *value;
value = ngx_http_get_indexed_variable(r, op->data);
@@ -669,16 +683,18 @@
return ngx_cpymem(buf, value->data, value->len);
} else {
- return (u_char *) ngx_http_log_escape(buf, value->data, value->len);
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
+ return (u_char *) ngx_http_log_escape(lcf, buf, value->data, value->len);
}
}
static uintptr_t
-ngx_http_log_escape(u_char *dst, u_char *src, size_t size)
+ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst, u_char *src,
+ size_t size)
{
- ngx_uint_t n;
- static u_char hex[] = "0123456789ABCDEF";
+ ngx_uint_t n;
+ static u_char hex[] = "0123456789ABCDEF";
static uint32_t escape[] = {
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
@@ -698,6 +714,12 @@
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
};
+ if (lcf->escape_non_ascii) {
+ ngx_memset(&escape[4], 0xff, sizeof(uint32_t) * 4);
+
+ } else {
+ ngx_memzero(&escape[4], sizeof(uint32_t) * 4);
+ }
if (dst == NULL) {
@@ -781,6 +803,7 @@
}
conf->open_file_cache = NGX_CONF_UNSET_PTR;
+ conf->escape_non_ascii = NGX_CONF_UNSET;
return conf;
}
@@ -796,6 +819,8 @@
ngx_http_log_fmt_t *fmt;
ngx_http_log_main_conf_t *lmcf;
+ ngx_conf_merge_value(conf->escape_non_ascii, prev->escape_non_ascii, 1);
+
if (conf->open_file_cache == NGX_CONF_UNSET_PTR) {
conf->open_file_cache = prev->open_file_cache;

View File

@ -0,0 +1,24 @@
diff -ur nginx-1.5.9/auto/cc/gcc nginx-1.5.9-patched/auto/cc/gcc
--- nginx-1.5.9/auto/cc/gcc 2011-06-27 19:53:00.205737804 +0800
+++ nginx-1.5.9-patched/auto/cc/gcc 2011-06-27 19:53:13.837741087 +0800
@@ -169,7 +169,7 @@
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"
diff -ur nginx-1.5.9/auto/cc/icc nginx-1.5.9-patched/auto/cc/icc
--- nginx-1.5.9/auto/cc/icc 2011-06-27 19:52:56.370157068 +0800
+++ nginx-1.5.9-patched/auto/cc/icc 2011-06-27 19:53:19.508916811 +0800
@@ -139,7 +139,7 @@
esac
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"

View File

@ -0,0 +1,90 @@
--- nginx-1.5.9/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
+++ nginx-1.5.9-patched/src/http/ngx_http_core_module.c 2011-01-30 19:24:34.956354518 +0800
@@ -57,6 +57,8 @@
void *conf);
static char *ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
+static char *ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd,
+ void *conf);
static char *ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
static char *ngx_http_core_open_file_cache(ngx_conf_t *cf, ngx_command_t *cmd,
@@ -614,6 +616,14 @@
0,
NULL },
+ { ngx_string("no_error_pages"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
+ |NGX_CONF_NOARGS,
+ ngx_http_core_no_error_pages,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ 0,
+ NULL },
+
{ ngx_string("try_files"),
NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_2MORE,
ngx_http_core_try_files,
@@ -3052,7 +3062,6 @@
* clcf->types = NULL;
* clcf->default_type = { 0, NULL };
* clcf->error_log = NULL;
- * clcf->error_pages = NULL;
* clcf->try_files = NULL;
* clcf->client_body_path = NULL;
* clcf->regex = NULL;
@@ -3062,6 +3071,7 @@
* clcf->gzip_proxied = 0;
*/
+ clcf->error_pages = NGX_CONF_UNSET_PTR;
clcf->client_max_body_size = NGX_CONF_UNSET;
clcf->client_body_buffer_size = NGX_CONF_UNSET_SIZE;
clcf->client_body_timeout = NGX_CONF_UNSET_MSEC;
@@ -3250,9 +3260,7 @@
}
}
- if (conf->error_pages == NULL && prev->error_pages) {
- conf->error_pages = prev->error_pages;
- }
+ ngx_conf_merge_ptr_value(conf->error_pages, prev->error_pages, NULL);
ngx_conf_merge_str_value(conf->default_type,
prev->default_type, "text/plain");
@@ -3988,6 +3996,10 @@
ngx_http_compile_complex_value_t ccv;
if (clcf->error_pages == NULL) {
+ return "conflicts with \"no_error_pages\"";
+ }
+
+ if (clcf->error_pages == NGX_CONF_UNSET_PTR) {
clcf->error_pages = ngx_array_create(cf->pool, 4,
sizeof(ngx_http_err_page_t));
if (clcf->error_pages == NULL) {
@@ -4095,6 +4107,25 @@
static char *
+ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
+{
+ ngx_http_core_loc_conf_t *clcf = conf;
+
+ if (clcf->error_pages == NULL) {
+ return "is duplicate";
+ }
+
+ if (clcf->error_pages != NGX_CONF_UNSET_PTR) {
+ return "conflicts with \"error_page\"";
+ }
+
+ clcf->error_pages = NULL;
+
+ return NGX_CONF_OK;
+}
+
+
+static char *
ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
ngx_http_core_loc_conf_t *clcf = conf;

View File

@ -0,0 +1,606 @@
diff -upr nginx-1.5.9/src/core/nginx.h nginx-1.5.9-patched/src/core/nginx.h
--- nginx-1.5.9/src/core/nginx.h 2013-05-06 03:26:50.000000000 -0700
+++ nginx-1.5.9-patched/src/core/nginx.h 2013-06-10 16:12:23.691136795 -0700
@@ -10,7 +10,7 @@
#define nginx_version 1005009
#define NGINX_VERSION "1.5.9"
-#define NGINX_VER "openresty/" NGINX_VERSION ".unknown"
+#define NGINX_VER "openresty/" NGINX_VERSION ".unknown (no pool)"
#define NGINX_VAR "NGINX"
diff -urp nginx-1.5.9/src/core/ngx_array.c nginx-1.5.9-patched/src/core/ngx_array.c
--- nginx-1.5.9/src/core/ngx_array.c 2014-01-22 05:43:00.000000000 -0800
+++ nginx-1.5.9-patched/src/core/ngx_array.c 2014-01-27 21:25:14.887049509 -0800
@@ -30,26 +30,30 @@ ngx_array_create(ngx_pool_t *p, ngx_uint
void
ngx_array_destroy(ngx_array_t *a)
{
- ngx_pool_t *p;
+ ngx_pool_t *p;
+ ngx_array_link_t *link;
p = a->pool;
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last) {
- p->d.last -= a->size * a->nalloc;
+ if (a->elts) {
+ ngx_pfree(p, a->elts);
}
- if ((u_char *) a + sizeof(ngx_array_t) == p->d.last) {
- p->d.last = (u_char *) a;
+ for (link = a->old_elts; link; link = link->next) {
+ ngx_pfree(p, link->elts);
}
+
+ ngx_pfree(p, a);
}
void *
ngx_array_push(ngx_array_t *a)
{
- void *elt, *new;
- size_t size;
- ngx_pool_t *p;
+ void *elt, *new;
+ size_t size;
+ ngx_pool_t *p;
+ ngx_array_link_t *link;
if (a->nelts == a->nalloc) {
@@ -59,29 +63,27 @@ ngx_array_push(ngx_array_t *a)
p = a->pool;
- if ((u_char *) a->elts + size == p->d.last
- && p->d.last + a->size <= p->d.end)
- {
- /*
- * the array allocation is the last in the pool
- * and there is space for new allocation
- */
-
- p->d.last += a->size;
- a->nalloc++;
-
- } else {
- /* allocate a new array */
-
- new = ngx_palloc(p, 2 * size);
- if (new == NULL) {
- return NULL;
- }
-
- ngx_memcpy(new, a->elts, size);
- a->elts = new;
- a->nalloc *= 2;
+ /* allocate a new array */
+
+ new = ngx_palloc(p, 2 * size);
+ if (new == NULL) {
+ return NULL;
+ }
+
+ ngx_memcpy(new, a->elts, size);
+
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
+ if (link == NULL) {
+ ngx_pfree(p, new);
+ return NULL;
}
+
+ link->next = a->old_elts;
+ link->elts = a->elts;
+ a->old_elts = link;
+
+ a->elts = new;
+ a->nalloc *= 2;
}
elt = (u_char *) a->elts + a->size * a->nelts;
@@ -95,11 +97,10 @@ void *
ngx_array_push_n(ngx_array_t *a, ngx_uint_t n)
{
void *elt, *new;
- size_t size;
ngx_uint_t nalloc;
ngx_pool_t *p;
- size = n * a->size;
+ ngx_array_link_t *link;
if (a->nelts + n > a->nalloc) {
@@ -107,31 +108,27 @@ ngx_array_push_n(ngx_array_t *a, ngx_uin
p = a->pool;
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last
- && p->d.last + size <= p->d.end)
- {
- /*
- * the array allocation is the last in the pool
- * and there is space for new allocation
- */
-
- p->d.last += size;
- a->nalloc += n;
-
- } else {
- /* allocate a new array */
-
- nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
-
- new = ngx_palloc(p, nalloc * a->size);
- if (new == NULL) {
- return NULL;
- }
-
- ngx_memcpy(new, a->elts, a->nelts * a->size);
- a->elts = new;
- a->nalloc = nalloc;
+ nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
+
+ new = ngx_palloc(p, nalloc * a->size);
+ if (new == NULL) {
+ return NULL;
+ }
+
+ ngx_memcpy(new, a->elts, a->nelts * a->size);
+
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
+ if (link == NULL) {
+ ngx_pfree(p, new);
+ return NULL;
}
+
+ link->next = a->old_elts;
+ link->elts = a->elts;
+ a->old_elts = link;
+
+ a->elts = new;
+ a->nalloc = nalloc;
}
elt = (u_char *) a->elts + a->size * a->nelts;
diff -urp nginx-1.5.9/src/core/ngx_array.h nginx-1.5.9-patched/src/core/ngx_array.h
--- nginx-1.5.9/src/core/ngx_array.h 2014-01-22 05:43:00.000000000 -0800
+++ nginx-1.5.9-patched/src/core/ngx_array.h 2014-01-27 21:25:14.888049518 -0800
@@ -13,12 +13,23 @@
#include <ngx_core.h>
+typedef struct ngx_array_link_s ngx_array_link_t;
+
+
+struct ngx_array_link_s {
+ void *elts;
+ ngx_array_link_t *next;
+};
+
+
typedef struct {
void *elts;
ngx_uint_t nelts;
size_t size;
ngx_uint_t nalloc;
ngx_pool_t *pool;
+
+ ngx_array_link_t *old_elts;
} ngx_array_t;
@@ -40,6 +51,7 @@ ngx_array_init(ngx_array_t *array, ngx_p
array->size = size;
array->nalloc = n;
array->pool = pool;
+ array->old_elts = NULL;
array->elts = ngx_palloc(pool, n * size);
if (array->elts == NULL) {
diff -urp nginx-1.5.9/src/core/ngx_palloc.c nginx-1.5.9-patched/src/core/ngx_palloc.c
--- nginx-1.5.9/src/core/ngx_palloc.c 2014-01-22 05:43:00.000000000 -0800
+++ nginx-1.5.9-patched/src/core/ngx_palloc.c 2014-01-27 21:42:30.905552064 -0800
@@ -9,32 +9,23 @@
#include <ngx_core.h>
-static void *ngx_palloc_block(ngx_pool_t *pool, size_t size);
-static void *ngx_palloc_large(ngx_pool_t *pool, size_t size);
-
-
ngx_pool_t *
ngx_create_pool(size_t size, ngx_log_t *log)
{
- ngx_pool_t *p;
+ ngx_pool_t *p;
- p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
+ size = sizeof(ngx_pool_t);
+ p = ngx_alloc(size, log);
if (p == NULL) {
return NULL;
}
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
- p->d.end = (u_char *) p + size;
- p->d.next = NULL;
- p->d.failed = 0;
+ ngx_memzero(p, size);
size = size - sizeof(ngx_pool_t);
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
p->current = p;
- p->chain = NULL;
- p->large = NULL;
- p->cleanup = NULL;
p->log = log;
return p;
@@ -44,8 +35,7 @@ ngx_create_pool(size_t size, ngx_log_t *
void
ngx_destroy_pool(ngx_pool_t *pool)
{
- ngx_pool_t *p, *n;
- ngx_pool_large_t *l;
+ ngx_pool_data_t *d, *n;
ngx_pool_cleanup_t *c;
for (c = pool->cleanup; c; c = c->next) {
@@ -56,13 +46,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
}
}
- for (l = pool->large; l; l = l->next) {
-
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
-
- if (l->alloc) {
- ngx_free(l->alloc);
- }
+ if (pool->d == NULL) {
+ ngx_free(pool);
+ return;
}
#if (NGX_DEBUG)
@@ -72,9 +58,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
* so we cannot use this log while free()ing the pool
*/
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
- "free: %p, unused: %uz", p, p->d.end - p->d.last);
+ "free: %p, unused: %d", d, 0);
if (n == NULL) {
break;
@@ -83,175 +69,84 @@ ngx_destroy_pool(ngx_pool_t *pool)
#endif
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
- ngx_free(p);
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
+ ngx_free(d->alloc);
+ ngx_free(d);
if (n == NULL) {
break;
}
}
-}
+ pool->d = NULL;
-void
-ngx_reset_pool(ngx_pool_t *pool)
-{
- ngx_pool_t *p;
- ngx_pool_large_t *l;
-
- for (l = pool->large; l; l = l->next) {
- if (l->alloc) {
- ngx_free(l->alloc);
- }
- }
-
- for (p = pool; p; p = p->d.next) {
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
- p->d.failed = 0;
- }
-
- pool->current = pool;
- pool->chain = NULL;
- pool->large = NULL;
+ ngx_free(pool);
}
-void *
-ngx_palloc(ngx_pool_t *pool, size_t size)
+void
+ngx_reset_pool(ngx_pool_t *pool)
{
- u_char *m;
- ngx_pool_t *p;
-
- if (size <= pool->max) {
+ ngx_pool_data_t *d, *n;
+ ngx_pool_data_t *saved = NULL;
- p = pool->current;
-
- do {
- m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT);
-
- if ((size_t) (p->d.end - m) >= size) {
- p->d.last = m + size;
-
- return m;
+ if (pool->d) {
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
+ if (d->alloc == pool->log) {
+ saved = d;
+ continue;
}
- p = p->d.next;
-
- } while (p);
-
- return ngx_palloc_block(pool, size);
- }
-
- return ngx_palloc_large(pool, size);
-}
-
-
-void *
-ngx_pnalloc(ngx_pool_t *pool, size_t size)
-{
- u_char *m;
- ngx_pool_t *p;
-
- if (size <= pool->max) {
-
- p = pool->current;
-
- do {
- m = p->d.last;
-
- if ((size_t) (p->d.end - m) >= size) {
- p->d.last = m + size;
+ ngx_free(d->alloc);
+ ngx_free(d);
- return m;
+ if (n == NULL) {
+ break;
}
+ }
- p = p->d.next;
-
- } while (p);
-
- return ngx_palloc_block(pool, size);
+ pool->d = saved;
+ pool->current = pool;
+ pool->chain = NULL;
}
-
- return ngx_palloc_large(pool, size);
}
-static void *
-ngx_palloc_block(ngx_pool_t *pool, size_t size)
+void *
+ngx_malloc(ngx_pool_t *pool, size_t size)
{
- u_char *m;
- size_t psize;
- ngx_pool_t *p, *new, *current;
+ ngx_pool_data_t *d;
+ void *p;
- psize = (size_t) (pool->d.end - (u_char *) pool);
-
- m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
- if (m == NULL) {
+ p = ngx_alloc(size, pool->log);
+ if (p == NULL) {
return NULL;
}
- new = (ngx_pool_t *) m;
-
- new->d.end = m + psize;
- new->d.next = NULL;
- new->d.failed = 0;
-
- m += sizeof(ngx_pool_data_t);
- m = ngx_align_ptr(m, NGX_ALIGNMENT);
- new->d.last = m + size;
-
- current = pool->current;
-
- for (p = current; p->d.next; p = p->d.next) {
- if (p->d.failed++ > 4) {
- current = p->d.next;
- }
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
+ if (d == NULL){
+ ngx_free(p);
+ return NULL;
}
- p->d.next = new;
-
- pool->current = current ? current : new;
-
- return m;
+ d->alloc = p;
+ d->next = pool->d;
+ pool->d = d;
+ return p;
}
-static void *
-ngx_palloc_large(ngx_pool_t *pool, size_t size)
+void *
+ngx_palloc(ngx_pool_t *pool, size_t size)
{
- void *p;
- ngx_uint_t n;
- ngx_pool_large_t *large;
-
- p = ngx_alloc(size, pool->log);
- if (p == NULL) {
- return NULL;
- }
-
- n = 0;
-
- for (large = pool->large; large; large = large->next) {
- if (large->alloc == NULL) {
- large->alloc = p;
- return p;
- }
-
- if (n++ > 3) {
- break;
- }
- }
-
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
- if (large == NULL) {
- ngx_free(p);
- return NULL;
- }
+ return ngx_malloc(pool, size);
+}
- large->alloc = p;
- large->next = pool->large;
- pool->large = large;
- return p;
+void *
+ngx_pnalloc(ngx_pool_t *pool, size_t size)
+{
+ return ngx_malloc(pool, size);
}
@@ -259,38 +154,48 @@ void *
ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment)
{
void *p;
- ngx_pool_large_t *large;
+ ngx_pool_data_t *d;
p = ngx_memalign(alignment, size, pool->log);
if (p == NULL) {
return NULL;
}
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
- if (large == NULL) {
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
+ if (d == NULL){
ngx_free(p);
return NULL;
}
- large->alloc = p;
- large->next = pool->large;
- pool->large = large;
-
+ d->alloc = p;
+ d->next = pool->d;
+ pool->d = d;
return p;
}
ngx_int_t
-ngx_pfree(ngx_pool_t *pool, void *p)
+ngx_pfree(ngx_pool_t *pool, void *data)
{
- ngx_pool_large_t *l;
+ ngx_pool_data_t *p, *d;
- for (l = pool->large; l; l = l->next) {
- if (p == l->alloc) {
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
- "free: %p", l->alloc);
- ngx_free(l->alloc);
- l->alloc = NULL;
+ p = NULL;
+ for (d = pool->d; d; p = d, d = d->next) {
+ if (data == d->alloc) {
+
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", d->alloc);
+
+ ngx_free(d->alloc);
+ d->alloc = NULL;
+
+ if (p) {
+ p->next = d->next;
+
+ } else {
+ pool->d = d->next;
+ }
+
+ ngx_free(d);
return NGX_OK;
}
diff -urp nginx-1.5.9/src/core/ngx_palloc.h nginx-1.5.9-patched/src/core/ngx_palloc.h
--- nginx-1.5.9/src/core/ngx_palloc.h 2014-01-22 05:43:00.000000000 -0800
+++ nginx-1.5.9-patched/src/core/ngx_palloc.h 2014-01-27 21:25:14.911049721 -0800
@@ -38,28 +38,21 @@ struct ngx_pool_cleanup_s {
};
-typedef struct ngx_pool_large_s ngx_pool_large_t;
-
-struct ngx_pool_large_s {
- ngx_pool_large_t *next;
- void *alloc;
-};
+typedef struct ngx_pool_data_s ngx_pool_large_t;
+typedef struct ngx_pool_data_s ngx_pool_data_t;
-typedef struct {
- u_char *last;
- u_char *end;
- ngx_pool_t *next;
- ngx_uint_t failed;
-} ngx_pool_data_t;
+struct ngx_pool_data_s {
+ ngx_pool_data_t *next;
+ void *alloc;
+};
struct ngx_pool_s {
- ngx_pool_data_t d;
+ ngx_pool_data_t *d;
size_t max;
ngx_pool_t *current;
ngx_chain_t *chain;
- ngx_pool_large_t *large;
ngx_pool_cleanup_t *cleanup;
ngx_log_t *log;
};

View File

@ -0,0 +1,26 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1386694955 28800
# Node ID 9ba6b149669f1f02eeb4cdc0ebd364a949b5c469
# Parent 30e806b8636af5fd3f03ec17df24801f390f7511
Configure: added new option --with-pcre-conf-opt=OPTIONS.
diff -r 30e806b8636a -r 9ba6b149669f auto/options
--- a/auto/options Mon Dec 09 10:16:44 2013 +0400
+++ b/auto/options Tue Dec 10 09:02:35 2013 -0800
@@ -286,6 +286,7 @@
--with-pcre) USE_PCRE=YES ;;
--with-pcre=*) PCRE="$value" ;;
--with-pcre-opt=*) PCRE_OPT="$value" ;;
+ --with-pcre-conf-opt=*) PCRE_CONF_OPT="$value" ;;
--with-pcre-jit) PCRE_JIT=YES ;;
--with-openssl=*) OPENSSL="$value" ;;
@@ -441,6 +442,7 @@
--with-pcre force PCRE library usage
--with-pcre=DIR set path to PCRE library sources
--with-pcre-opt=OPTIONS set additional build options for PCRE
+ --with-pcre-conf-opt=OPTIONS set additional configure options for PCRE
--with-pcre-jit build PCRE with JIT compilation support
--with-md5=DIR set path to md5 library sources

View File

@ -0,0 +1,15 @@
--- nginx-1.5.9/src/http/modules/ngx_http_proxy_module.c 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.5.9-patched/src/http/modules/ngx_http_proxy_module.c 2013-10-27 15:29:41.619378592 -0700
@@ -602,10 +602,10 @@ static ngx_keyval_t ngx_http_proxy_cach
static ngx_http_variable_t ngx_http_proxy_vars[] = {
{ ngx_string("proxy_host"), NULL, ngx_http_proxy_host_variable, 0,
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("proxy_port"), NULL, ngx_http_proxy_port_variable, 0,
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("proxy_add_x_forwarded_for"), NULL,
ngx_http_proxy_add_x_forwarded_for_variable, 0, NGX_HTTP_VAR_NOHASH, 0 },

View File

@ -0,0 +1,24 @@
diff -ur nginx-1.5.9/src/core/nginx.h nginx-1.5.9-patched/src/core/nginx.h
--- nginx-1.5.9/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
+++ nginx-1.5.9-patched/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1005009
#define NGINX_VERSION "1.5.9"
-#define NGINX_VER "nginx/" NGINX_VERSION
+#define NGINX_VER "openresty/" NGINX_VERSION ".unknown"
#define NGINX_VAR "NGINX"
#define NGX_OLDPID_EXT ".oldbin"
diff -ur nginx-1.5.9/src/http/ngx_http_header_filter_module.c nginx-1.5.9-patched/src/http/ngx_http_header_filter_module.c
--- nginx-1.5.9/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
+++ nginx-1.5.9-patched/src/http/ngx_http_header_filter_module.c 2010-03-30 10:52:53.670909405 +0800
@@ -45,7 +45,7 @@
};
-static char ngx_http_server_string[] = "Server: nginx" CRLF;
+static char ngx_http_server_string[] = "Server: openresty" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

View File

@ -0,0 +1,44 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1390506359 28800
# Node ID 17186b98c235c07e94c64e5853689f790f173756
# Parent 4b50d1f299d8a69f3e3f7975132e1490352642fe
Variable: setting $args should invalidate unparsed uri.
diff -r 4b50d1f299d8 -r 17186b98c235 src/http/ngx_http_variables.c
--- a/src/http/ngx_http_variables.c Fri Jan 10 11:22:14 2014 -0800
+++ b/src/http/ngx_http_variables.c Thu Jan 23 11:45:59 2014 -0800
@@ -15,6 +15,8 @@
ngx_http_variable_value_t *v, uintptr_t data);
static void ngx_http_variable_request_set(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
+static void ngx_http_variable_request_args_set(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_variable_request_get_size(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
static void ngx_http_variable_request_set_size(ngx_http_request_t *r,
@@ -218,7 +220,7 @@
NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("args"),
- ngx_http_variable_request_set,
+ ngx_http_variable_request_args_set,
ngx_http_variable_request,
offsetof(ngx_http_request_t, args),
NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
@@ -647,6 +649,15 @@
static void
+ngx_http_variable_request_args_set(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data)
+{
+ r->valid_unparsed_uri = 0;
+ ngx_http_variable_request_set(r, v, data);
+}
+
+
+static void
ngx_http_variable_request_set(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{

View File

@ -0,0 +1,11 @@
--- nginx-1.5.9/src/core/ngx_slab.c 2012-09-24 11:34:04.000000000 -0700
+++ nginx-1.5.9-patched/src/core/ngx_slab.c 2012-12-05 20:47:07.296694952 -0800
@@ -657,7 +657,7 @@ ngx_slab_alloc_pages(ngx_slab_pool_t *po
}
}
- ngx_slab_error(pool, NGX_LOG_CRIT, "ngx_slab_alloc() failed: no memory");
+ ngx_slab_error(pool, NGX_LOG_INFO, "ngx_slab_alloc() failed: no memory");
return NULL;
}

View File

@ -0,0 +1,40 @@
diff -rudp nginx-1.5.9/src/http/ngx_http_upstream.c nginx-1.5.9-patched/src/http/ngx_http_upstream.c
--- nginx-1.5.9/src/http/ngx_http_upstream.c 2012-08-06 10:34:08.000000000 -0700
+++ nginx-1.5.9-patched/src/http/ngx_http_upstream.c 2012-12-05 14:46:41.741173058 -0800
@@ -1216,6 +1216,7 @@ ngx_http_upstream_connect(ngx_http_reque
}
u->request_sent = 0;
+ u->request_all_sent = 0;
if (rc == NGX_AGAIN) {
ngx_add_timer(c->write, u->conf->connect_timeout);
@@ -1418,6 +1419,8 @@ ngx_http_upstream_send_request(ngx_http_
/* rc == NGX_OK */
+ u->request_all_sent = 1;
+
if (c->tcp_nopush == NGX_TCP_NOPUSH_SET) {
if (ngx_tcp_push(c->fd) == NGX_ERROR) {
ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
@@ -1484,7 +1487,7 @@ ngx_http_upstream_send_request_handler(n
#endif
- if (u->header_sent) {
+ if (u->request_all_sent) {
u->write_event_handler = ngx_http_upstream_dummy_handler;
(void) ngx_handle_write_event(c->write, 0);
diff -rudp nginx-1.5.9/src/http/ngx_http_upstream.h nginx-1.5.9-patched/src/http/ngx_http_upstream.h
--- nginx-1.5.9/src/http/ngx_http_upstream.h 2012-02-13 03:01:58.000000000 -0800
+++ nginx-1.5.9-patched/src/http/ngx_http_upstream.h 2012-12-05 14:41:09.763514741 -0800
@@ -324,6 +324,7 @@ struct ngx_http_upstream_s {
unsigned keepalive:1;
unsigned request_sent:1;
+ unsigned request_all_sent:1;
unsigned header_sent:1;
};

View File

@ -0,0 +1,22 @@
--- nginx-1.7.0/src/http/ngx_http_file_cache.c 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.7.0-patched/src/http/ngx_http_file_cache.c 2013-10-26 14:47:56.184041728 -0700
@@ -432,6 +432,7 @@ ngx_http_file_cache_lock_wait_handler(ng
ngx_uint_t wait;
ngx_msec_t timer;
ngx_http_cache_t *c;
+ ngx_connection_t *conn;
ngx_http_request_t *r;
ngx_http_file_cache_t *cache;
@@ -471,7 +472,10 @@ wakeup:
c->waiting = 0;
r->main->blocked--;
- r->connection->write->handler(r->connection->write);
+
+ conn = r->connection;
+ r->write_event_handler(r);
+ ngx_http_run_posted_requests(conn);
}

View File

@ -0,0 +1,19 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1383598130 28800
# Node ID f64218e1ac963337d84092536f588b8e0d99bbaa
# Parent dea321e5c0216efccbb23e84bbce7cf3e28f130c
Cache: gracefully exit the cache manager process.
diff -r dea321e5c021 -r f64218e1ac96 src/os/unix/ngx_process_cycle.c
--- a/src/os/unix/ngx_process_cycle.c Thu Oct 31 18:23:49 2013 +0400
+++ b/src/os/unix/ngx_process_cycle.c Mon Nov 04 12:48:50 2013 -0800
@@ -1335,7 +1335,7 @@
if (ngx_terminate || ngx_quit) {
ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
- exit(0);
+ ngx_worker_process_exit(cycle);
}
if (ngx_reopen) {

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,11 @@
--- nginx-1.7.0/src/http/ngx_http_request.c 2013-05-06 03:26:50.000000000 -0700
+++ nginx-1.7.0-patched/src/http/ngx_http_request.c 2013-06-11 12:59:48.008321688 -0700
@@ -1951,7 +1951,7 @@
ngx_int_t rc;
ngx_http_connection_t *hc;
ngx_http_core_loc_conf_t *clcf;
- ngx_http_core_srv_conf_t *cscf;
+ ngx_http_core_srv_conf_t *cscf = NULL;
hc = r->http_connection;

View File

@ -0,0 +1,13 @@
--- nginx-1.7.0/src/core/ngx_log.h 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.7.0-patched/src/core/ngx_log.h 2013-12-05 20:35:35.996236720 -0800
@@ -64,7 +64,9 @@ struct ngx_log_s {
};
-#define NGX_MAX_ERROR_STR 2048
+#ifndef NGX_MAX_ERROR_STR
+#define NGX_MAX_ERROR_STR 4096
+#endif
/*********************************/

View File

@ -0,0 +1,15 @@
--- nginx-1.7.0/src/http/modules/ngx_http_proxy_module.c 2012-04-23 18:40:01.000000000 +0800
+++ nginx-1.7.0-patched/src/http/modules/ngx_http_proxy_module.c 2012-06-24 12:48:57.289834450 +0800
@@ -3023,8 +3023,10 @@
if (conf->upstream.upstream || conf->proxy_lengths) {
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
- if (clcf->handler == NULL && clcf->lmt_excpt) {
- clcf->handler = ngx_http_proxy_handler;
+ if (clcf->handler == NULL) {
+ if (clcf->lmt_excpt) {
+ clcf->handler = ngx_http_proxy_handler;
+ }
conf->location = prev->location;
}
}

View File

@ -0,0 +1,115 @@
--- nginx-1.7.0/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
+++ nginx-1.7.0-patched/src/http/modules/ngx_http_log_module.c 2011-11-10 16:17:29.599039534 +0800
@@ -61,6 +61,8 @@
time_t open_file_cache_valid;
ngx_uint_t open_file_cache_min_uses;
+ ngx_flag_t escape_non_ascii;
+
ngx_uint_t off; /* unsigned off:1 */
} ngx_http_log_loc_conf_t;
@@ -104,7 +106,8 @@
uintptr_t data);
static u_char *ngx_http_log_variable(ngx_http_request_t *r, u_char *buf,
ngx_http_log_op_t *op);
-static uintptr_t ngx_http_log_escape(u_char *dst, u_char *src, size_t size);
+static uintptr_t ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst,
+ u_char *src, size_t size);
static void *ngx_http_log_create_main_conf(ngx_conf_t *cf);
@@ -146,6 +149,13 @@
0,
NULL },
+ { ngx_string("log_escape_non_ascii"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
+ ngx_conf_set_flag_slot,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ offsetof(ngx_http_log_loc_conf_t, escape_non_ascii),
+ NULL },
+
ngx_null_command
};
@@ -637,6 +647,7 @@
ngx_http_log_variable_getlen(ngx_http_request_t *r, uintptr_t data)
{
uintptr_t len;
+ ngx_http_log_loc_conf_t *lcf;
ngx_http_variable_value_t *value;
value = ngx_http_get_indexed_variable(r, data);
@@ -645,7 +656,9 @@
return 1;
}
- len = ngx_http_log_escape(NULL, value->data, value->len);
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
+
+ len = ngx_http_log_escape(lcf, NULL, value->data, value->len);
value->escape = len ? 1 : 0;
@@ -656,6 +669,7 @@
static u_char *
ngx_http_log_variable(ngx_http_request_t *r, u_char *buf, ngx_http_log_op_t *op)
{
+ ngx_http_log_loc_conf_t *lcf;
ngx_http_variable_value_t *value;
value = ngx_http_get_indexed_variable(r, op->data);
@@ -669,16 +683,18 @@
return ngx_cpymem(buf, value->data, value->len);
} else {
- return (u_char *) ngx_http_log_escape(buf, value->data, value->len);
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
+ return (u_char *) ngx_http_log_escape(lcf, buf, value->data, value->len);
}
}
static uintptr_t
-ngx_http_log_escape(u_char *dst, u_char *src, size_t size)
+ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst, u_char *src,
+ size_t size)
{
- ngx_uint_t n;
- static u_char hex[] = "0123456789ABCDEF";
+ ngx_uint_t n;
+ static u_char hex[] = "0123456789ABCDEF";
static uint32_t escape[] = {
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
@@ -698,6 +714,12 @@
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
};
+ if (lcf->escape_non_ascii) {
+ ngx_memset(&escape[4], 0xff, sizeof(uint32_t) * 4);
+
+ } else {
+ ngx_memzero(&escape[4], sizeof(uint32_t) * 4);
+ }
if (dst == NULL) {
@@ -781,6 +803,7 @@
}
conf->open_file_cache = NGX_CONF_UNSET_PTR;
+ conf->escape_non_ascii = NGX_CONF_UNSET;
return conf;
}
@@ -796,6 +819,8 @@
ngx_http_log_fmt_t *fmt;
ngx_http_log_main_conf_t *lmcf;
+ ngx_conf_merge_value(conf->escape_non_ascii, prev->escape_non_ascii, 1);
+
if (conf->open_file_cache == NGX_CONF_UNSET_PTR) {
conf->open_file_cache = prev->open_file_cache;

View File

@ -0,0 +1,36 @@
diff -urp nginx-1.7.0/auto/cc/clang nginx-1.7.0-patched/auto/cc/clang
--- nginx-1.7.0/auto/cc/clang 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.7.0-patched/auto/cc/clang 2014-03-13 20:54:26.241413360 -0700
@@ -89,7 +89,7 @@ CFLAGS="$CFLAGS -Wconditional-uninitiali
CFLAGS="$CFLAGS -Wno-unused-parameter"
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"
diff -urp nginx-1.7.0/auto/cc/gcc nginx-1.7.0-patched/auto/cc/gcc
--- nginx-1.7.0/auto/cc/gcc 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.7.0-patched/auto/cc/gcc 2014-03-13 20:54:13.301355329 -0700
@@ -168,7 +168,7 @@ esac
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"
diff -urp nginx-1.7.0/auto/cc/icc nginx-1.7.0-patched/auto/cc/icc
--- nginx-1.7.0/auto/cc/icc 2014-03-04 03:39:24.000000000 -0800
+++ nginx-1.7.0-patched/auto/cc/icc 2014-03-13 20:54:13.301355329 -0700
@@ -115,7 +115,7 @@ case "$NGX_ICC_VER" in
esac
# stop on warning
-CFLAGS="$CFLAGS -Werror"
+#CFLAGS="$CFLAGS -Werror"
# debug
CFLAGS="$CFLAGS -g"

View File

@ -0,0 +1,90 @@
--- nginx-1.7.0/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
+++ nginx-1.7.0-patched/src/http/ngx_http_core_module.c 2011-01-30 19:24:34.956354518 +0800
@@ -57,6 +57,8 @@
void *conf);
static char *ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
+static char *ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd,
+ void *conf);
static char *ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf);
static char *ngx_http_core_open_file_cache(ngx_conf_t *cf, ngx_command_t *cmd,
@@ -614,6 +616,14 @@
0,
NULL },
+ { ngx_string("no_error_pages"),
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
+ |NGX_CONF_NOARGS,
+ ngx_http_core_no_error_pages,
+ NGX_HTTP_LOC_CONF_OFFSET,
+ 0,
+ NULL },
+
{ ngx_string("try_files"),
NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_2MORE,
ngx_http_core_try_files,
@@ -3052,7 +3062,6 @@
* clcf->types = NULL;
* clcf->default_type = { 0, NULL };
* clcf->error_log = NULL;
- * clcf->error_pages = NULL;
* clcf->try_files = NULL;
* clcf->client_body_path = NULL;
* clcf->regex = NULL;
@@ -3062,6 +3071,7 @@
* clcf->gzip_proxied = 0;
*/
+ clcf->error_pages = NGX_CONF_UNSET_PTR;
clcf->client_max_body_size = NGX_CONF_UNSET;
clcf->client_body_buffer_size = NGX_CONF_UNSET_SIZE;
clcf->client_body_timeout = NGX_CONF_UNSET_MSEC;
@@ -3250,9 +3260,7 @@
}
}
- if (conf->error_pages == NULL && prev->error_pages) {
- conf->error_pages = prev->error_pages;
- }
+ ngx_conf_merge_ptr_value(conf->error_pages, prev->error_pages, NULL);
ngx_conf_merge_str_value(conf->default_type,
prev->default_type, "text/plain");
@@ -3988,6 +3996,10 @@
ngx_http_compile_complex_value_t ccv;
if (clcf->error_pages == NULL) {
+ return "conflicts with \"no_error_pages\"";
+ }
+
+ if (clcf->error_pages == NGX_CONF_UNSET_PTR) {
clcf->error_pages = ngx_array_create(cf->pool, 4,
sizeof(ngx_http_err_page_t));
if (clcf->error_pages == NULL) {
@@ -4095,6 +4107,25 @@
static char *
+ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
+{
+ ngx_http_core_loc_conf_t *clcf = conf;
+
+ if (clcf->error_pages == NULL) {
+ return "is duplicate";
+ }
+
+ if (clcf->error_pages != NGX_CONF_UNSET_PTR) {
+ return "conflicts with \"error_page\"";
+ }
+
+ clcf->error_pages = NULL;
+
+ return NGX_CONF_OK;
+}
+
+
+static char *
ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
ngx_http_core_loc_conf_t *clcf = conf;

View File

@ -0,0 +1,606 @@
diff -upr nginx-1.7.0/src/core/nginx.h nginx-1.7.0-patched/src/core/nginx.h
--- nginx-1.7.0/src/core/nginx.h 2013-05-06 03:26:50.000000000 -0700
+++ nginx-1.7.0-patched/src/core/nginx.h 2013-06-10 16:12:23.691136795 -0700
@@ -10,7 +10,7 @@
#define nginx_version 1007000
#define NGINX_VERSION "1.7.0"
-#define NGINX_VER "openresty/" NGINX_VERSION ".unknown"
+#define NGINX_VER "openresty/" NGINX_VERSION ".unknown (no pool)"
#define NGINX_VAR "NGINX"
diff -urp nginx-1.7.0/src/core/ngx_array.c nginx-1.7.0-patched/src/core/ngx_array.c
--- nginx-1.7.0/src/core/ngx_array.c 2014-01-22 05:43:00.000000000 -0800
+++ nginx-1.7.0-patched/src/core/ngx_array.c 2014-01-27 21:25:14.887049509 -0800
@@ -30,26 +30,30 @@ ngx_array_create(ngx_pool_t *p, ngx_uint
void
ngx_array_destroy(ngx_array_t *a)
{
- ngx_pool_t *p;
+ ngx_pool_t *p;
+ ngx_array_link_t *link;
p = a->pool;
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last) {
- p->d.last -= a->size * a->nalloc;
+ if (a->elts) {
+ ngx_pfree(p, a->elts);
}
- if ((u_char *) a + sizeof(ngx_array_t) == p->d.last) {
- p->d.last = (u_char *) a;
+ for (link = a->old_elts; link; link = link->next) {
+ ngx_pfree(p, link->elts);
}
+
+ ngx_pfree(p, a);
}
void *
ngx_array_push(ngx_array_t *a)
{
- void *elt, *new;
- size_t size;
- ngx_pool_t *p;
+ void *elt, *new;
+ size_t size;
+ ngx_pool_t *p;
+ ngx_array_link_t *link;
if (a->nelts == a->nalloc) {
@@ -59,29 +63,27 @@ ngx_array_push(ngx_array_t *a)
p = a->pool;
- if ((u_char *) a->elts + size == p->d.last
- && p->d.last + a->size <= p->d.end)
- {
- /*
- * the array allocation is the last in the pool
- * and there is space for new allocation
- */
-
- p->d.last += a->size;
- a->nalloc++;
-
- } else {
- /* allocate a new array */
-
- new = ngx_palloc(p, 2 * size);
- if (new == NULL) {
- return NULL;
- }
-
- ngx_memcpy(new, a->elts, size);
- a->elts = new;
- a->nalloc *= 2;
+ /* allocate a new array */
+
+ new = ngx_palloc(p, 2 * size);
+ if (new == NULL) {
+ return NULL;
+ }
+
+ ngx_memcpy(new, a->elts, size);
+
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
+ if (link == NULL) {
+ ngx_pfree(p, new);
+ return NULL;
}
+
+ link->next = a->old_elts;
+ link->elts = a->elts;
+ a->old_elts = link;
+
+ a->elts = new;
+ a->nalloc *= 2;
}
elt = (u_char *) a->elts + a->size * a->nelts;
@@ -95,11 +97,10 @@ void *
ngx_array_push_n(ngx_array_t *a, ngx_uint_t n)
{
void *elt, *new;
- size_t size;
ngx_uint_t nalloc;
ngx_pool_t *p;
- size = n * a->size;
+ ngx_array_link_t *link;
if (a->nelts + n > a->nalloc) {
@@ -107,31 +108,27 @@ ngx_array_push_n(ngx_array_t *a, ngx_uin
p = a->pool;
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last
- && p->d.last + size <= p->d.end)
- {
- /*
- * the array allocation is the last in the pool
- * and there is space for new allocation
- */
-
- p->d.last += size;
- a->nalloc += n;
-
- } else {
- /* allocate a new array */
-
- nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
-
- new = ngx_palloc(p, nalloc * a->size);
- if (new == NULL) {
- return NULL;
- }
-
- ngx_memcpy(new, a->elts, a->nelts * a->size);
- a->elts = new;
- a->nalloc = nalloc;
+ nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
+
+ new = ngx_palloc(p, nalloc * a->size);
+ if (new == NULL) {
+ return NULL;
+ }
+
+ ngx_memcpy(new, a->elts, a->nelts * a->size);
+
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
+ if (link == NULL) {
+ ngx_pfree(p, new);
+ return NULL;
}
+
+ link->next = a->old_elts;
+ link->elts = a->elts;
+ a->old_elts = link;
+
+ a->elts = new;
+ a->nalloc = nalloc;
}
elt = (u_char *) a->elts + a->size * a->nelts;
diff -urp nginx-1.7.0/src/core/ngx_array.h nginx-1.7.0-patched/src/core/ngx_array.h
--- nginx-1.7.0/src/core/ngx_array.h 2014-01-22 05:43:00.000000000 -0800
+++ nginx-1.7.0-patched/src/core/ngx_array.h 2014-01-27 21:25:14.888049518 -0800
@@ -13,12 +13,23 @@
#include <ngx_core.h>
+typedef struct ngx_array_link_s ngx_array_link_t;
+
+
+struct ngx_array_link_s {
+ void *elts;
+ ngx_array_link_t *next;
+};
+
+
typedef struct {
void *elts;
ngx_uint_t nelts;
size_t size;
ngx_uint_t nalloc;
ngx_pool_t *pool;
+
+ ngx_array_link_t *old_elts;
} ngx_array_t;
@@ -40,6 +51,7 @@ ngx_array_init(ngx_array_t *array, ngx_p
array->size = size;
array->nalloc = n;
array->pool = pool;
+ array->old_elts = NULL;
array->elts = ngx_palloc(pool, n * size);
if (array->elts == NULL) {
diff -urp nginx-1.7.0/src/core/ngx_palloc.c nginx-1.7.0-patched/src/core/ngx_palloc.c
--- nginx-1.7.0/src/core/ngx_palloc.c 2014-01-22 05:43:00.000000000 -0800
+++ nginx-1.7.0-patched/src/core/ngx_palloc.c 2014-01-27 21:42:30.905552064 -0800
@@ -9,32 +9,23 @@
#include <ngx_core.h>
-static void *ngx_palloc_block(ngx_pool_t *pool, size_t size);
-static void *ngx_palloc_large(ngx_pool_t *pool, size_t size);
-
-
ngx_pool_t *
ngx_create_pool(size_t size, ngx_log_t *log)
{
- ngx_pool_t *p;
+ ngx_pool_t *p;
- p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
+ size = sizeof(ngx_pool_t);
+ p = ngx_alloc(size, log);
if (p == NULL) {
return NULL;
}
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
- p->d.end = (u_char *) p + size;
- p->d.next = NULL;
- p->d.failed = 0;
+ ngx_memzero(p, size);
size = size - sizeof(ngx_pool_t);
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
p->current = p;
- p->chain = NULL;
- p->large = NULL;
- p->cleanup = NULL;
p->log = log;
return p;
@@ -44,8 +35,7 @@ ngx_create_pool(size_t size, ngx_log_t *
void
ngx_destroy_pool(ngx_pool_t *pool)
{
- ngx_pool_t *p, *n;
- ngx_pool_large_t *l;
+ ngx_pool_data_t *d, *n;
ngx_pool_cleanup_t *c;
for (c = pool->cleanup; c; c = c->next) {
@@ -56,13 +46,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
}
}
- for (l = pool->large; l; l = l->next) {
-
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
-
- if (l->alloc) {
- ngx_free(l->alloc);
- }
+ if (pool->d == NULL) {
+ ngx_free(pool);
+ return;
}
#if (NGX_DEBUG)
@@ -72,9 +58,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
* so we cannot use this log while free()ing the pool
*/
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
- "free: %p, unused: %uz", p, p->d.end - p->d.last);
+ "free: %p, unused: %d", d, 0);
if (n == NULL) {
break;
@@ -83,175 +69,84 @@ ngx_destroy_pool(ngx_pool_t *pool)
#endif
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
- ngx_free(p);
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
+ ngx_free(d->alloc);
+ ngx_free(d);
if (n == NULL) {
break;
}
}
-}
+ pool->d = NULL;
-void
-ngx_reset_pool(ngx_pool_t *pool)
-{
- ngx_pool_t *p;
- ngx_pool_large_t *l;
-
- for (l = pool->large; l; l = l->next) {
- if (l->alloc) {
- ngx_free(l->alloc);
- }
- }
-
- for (p = pool; p; p = p->d.next) {
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
- p->d.failed = 0;
- }
-
- pool->current = pool;
- pool->chain = NULL;
- pool->large = NULL;
+ ngx_free(pool);
}
-void *
-ngx_palloc(ngx_pool_t *pool, size_t size)
+void
+ngx_reset_pool(ngx_pool_t *pool)
{
- u_char *m;
- ngx_pool_t *p;
-
- if (size <= pool->max) {
+ ngx_pool_data_t *d, *n;
+ ngx_pool_data_t *saved = NULL;
- p = pool->current;
-
- do {
- m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT);
-
- if ((size_t) (p->d.end - m) >= size) {
- p->d.last = m + size;
-
- return m;
+ if (pool->d) {
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
+ if (d->alloc == pool->log) {
+ saved = d;
+ continue;
}
- p = p->d.next;
-
- } while (p);
-
- return ngx_palloc_block(pool, size);
- }
-
- return ngx_palloc_large(pool, size);
-}
-
-
-void *
-ngx_pnalloc(ngx_pool_t *pool, size_t size)
-{
- u_char *m;
- ngx_pool_t *p;
-
- if (size <= pool->max) {
-
- p = pool->current;
-
- do {
- m = p->d.last;
-
- if ((size_t) (p->d.end - m) >= size) {
- p->d.last = m + size;
+ ngx_free(d->alloc);
+ ngx_free(d);
- return m;
+ if (n == NULL) {
+ break;
}
+ }
- p = p->d.next;
-
- } while (p);
-
- return ngx_palloc_block(pool, size);
+ pool->d = saved;
+ pool->current = pool;
+ pool->chain = NULL;
}
-
- return ngx_palloc_large(pool, size);
}
-static void *
-ngx_palloc_block(ngx_pool_t *pool, size_t size)
+void *
+ngx_malloc(ngx_pool_t *pool, size_t size)
{
- u_char *m;
- size_t psize;
- ngx_pool_t *p, *new, *current;
+ ngx_pool_data_t *d;
+ void *p;
- psize = (size_t) (pool->d.end - (u_char *) pool);
-
- m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
- if (m == NULL) {
+ p = ngx_alloc(size, pool->log);
+ if (p == NULL) {
return NULL;
}
- new = (ngx_pool_t *) m;
-
- new->d.end = m + psize;
- new->d.next = NULL;
- new->d.failed = 0;
-
- m += sizeof(ngx_pool_data_t);
- m = ngx_align_ptr(m, NGX_ALIGNMENT);
- new->d.last = m + size;
-
- current = pool->current;
-
- for (p = current; p->d.next; p = p->d.next) {
- if (p->d.failed++ > 4) {
- current = p->d.next;
- }
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
+ if (d == NULL){
+ ngx_free(p);
+ return NULL;
}
- p->d.next = new;
-
- pool->current = current ? current : new;
-
- return m;
+ d->alloc = p;
+ d->next = pool->d;
+ pool->d = d;
+ return p;
}
-static void *
-ngx_palloc_large(ngx_pool_t *pool, size_t size)
+void *
+ngx_palloc(ngx_pool_t *pool, size_t size)
{
- void *p;
- ngx_uint_t n;
- ngx_pool_large_t *large;
-
- p = ngx_alloc(size, pool->log);
- if (p == NULL) {
- return NULL;
- }
-
- n = 0;
-
- for (large = pool->large; large; large = large->next) {
- if (large->alloc == NULL) {
- large->alloc = p;
- return p;
- }
-
- if (n++ > 3) {
- break;
- }
- }
-
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
- if (large == NULL) {
- ngx_free(p);
- return NULL;
- }
+ return ngx_malloc(pool, size);
+}
- large->alloc = p;
- large->next = pool->large;
- pool->large = large;
- return p;
+void *
+ngx_pnalloc(ngx_pool_t *pool, size_t size)
+{
+ return ngx_malloc(pool, size);
}
@@ -259,38 +154,48 @@ void *
ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment)
{
void *p;
- ngx_pool_large_t *large;
+ ngx_pool_data_t *d;
p = ngx_memalign(alignment, size, pool->log);
if (p == NULL) {
return NULL;
}
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
- if (large == NULL) {
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
+ if (d == NULL){
ngx_free(p);
return NULL;
}
- large->alloc = p;
- large->next = pool->large;
- pool->large = large;
-
+ d->alloc = p;
+ d->next = pool->d;
+ pool->d = d;
return p;
}
ngx_int_t
-ngx_pfree(ngx_pool_t *pool, void *p)
+ngx_pfree(ngx_pool_t *pool, void *data)
{
- ngx_pool_large_t *l;
+ ngx_pool_data_t *p, *d;
- for (l = pool->large; l; l = l->next) {
- if (p == l->alloc) {
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
- "free: %p", l->alloc);
- ngx_free(l->alloc);
- l->alloc = NULL;
+ p = NULL;
+ for (d = pool->d; d; p = d, d = d->next) {
+ if (data == d->alloc) {
+
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", d->alloc);
+
+ ngx_free(d->alloc);
+ d->alloc = NULL;
+
+ if (p) {
+ p->next = d->next;
+
+ } else {
+ pool->d = d->next;
+ }
+
+ ngx_free(d);
return NGX_OK;
}
diff -urp nginx-1.7.0/src/core/ngx_palloc.h nginx-1.7.0-patched/src/core/ngx_palloc.h
--- nginx-1.7.0/src/core/ngx_palloc.h 2014-01-22 05:43:00.000000000 -0800
+++ nginx-1.7.0-patched/src/core/ngx_palloc.h 2014-01-27 21:25:14.911049721 -0800
@@ -38,28 +38,21 @@ struct ngx_pool_cleanup_s {
};
-typedef struct ngx_pool_large_s ngx_pool_large_t;
-
-struct ngx_pool_large_s {
- ngx_pool_large_t *next;
- void *alloc;
-};
+typedef struct ngx_pool_data_s ngx_pool_large_t;
+typedef struct ngx_pool_data_s ngx_pool_data_t;
-typedef struct {
- u_char *last;
- u_char *end;
- ngx_pool_t *next;
- ngx_uint_t failed;
-} ngx_pool_data_t;
+struct ngx_pool_data_s {
+ ngx_pool_data_t *next;
+ void *alloc;
+};
struct ngx_pool_s {
- ngx_pool_data_t d;
+ ngx_pool_data_t *d;
size_t max;
ngx_pool_t *current;
ngx_chain_t *chain;
- ngx_pool_large_t *large;
ngx_pool_cleanup_t *cleanup;
ngx_log_t *log;
};

View File

@ -0,0 +1,26 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1386694955 28800
# Node ID 9ba6b149669f1f02eeb4cdc0ebd364a949b5c469
# Parent 30e806b8636af5fd3f03ec17df24801f390f7511
Configure: added new option --with-pcre-conf-opt=OPTIONS.
diff -r 30e806b8636a -r 9ba6b149669f auto/options
--- a/auto/options Mon Dec 09 10:16:44 2013 +0400
+++ b/auto/options Tue Dec 10 09:02:35 2013 -0800
@@ -286,6 +286,7 @@
--with-pcre) USE_PCRE=YES ;;
--with-pcre=*) PCRE="$value" ;;
--with-pcre-opt=*) PCRE_OPT="$value" ;;
+ --with-pcre-conf-opt=*) PCRE_CONF_OPT="$value" ;;
--with-pcre-jit) PCRE_JIT=YES ;;
--with-openssl=*) OPENSSL="$value" ;;
@@ -441,6 +442,7 @@
--with-pcre force PCRE library usage
--with-pcre=DIR set path to PCRE library sources
--with-pcre-opt=OPTIONS set additional build options for PCRE
+ --with-pcre-conf-opt=OPTIONS set additional configure options for PCRE
--with-pcre-jit build PCRE with JIT compilation support
--with-md5=DIR set path to md5 library sources

View File

@ -0,0 +1,15 @@
--- nginx-1.7.0/src/http/modules/ngx_http_proxy_module.c 2013-10-08 05:07:14.000000000 -0700
+++ nginx-1.7.0-patched/src/http/modules/ngx_http_proxy_module.c 2013-10-27 15:29:41.619378592 -0700
@@ -602,10 +602,10 @@ static ngx_keyval_t ngx_http_proxy_cach
static ngx_http_variable_t ngx_http_proxy_vars[] = {
{ ngx_string("proxy_host"), NULL, ngx_http_proxy_host_variable, 0,
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("proxy_port"), NULL, ngx_http_proxy_port_variable, 0,
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("proxy_add_x_forwarded_for"), NULL,
ngx_http_proxy_add_x_forwarded_for_variable, 0, NGX_HTTP_VAR_NOHASH, 0 },

View File

@ -0,0 +1,24 @@
diff -ur nginx-1.7.0/src/core/nginx.h nginx-1.7.0-patched/src/core/nginx.h
--- nginx-1.7.0/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
+++ nginx-1.7.0-patched/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1007000
#define NGINX_VERSION "1.7.0"
-#define NGINX_VER "nginx/" NGINX_VERSION
+#define NGINX_VER "openresty/" NGINX_VERSION ".unknown"
#define NGINX_VAR "NGINX"
#define NGX_OLDPID_EXT ".oldbin"
diff -ur nginx-1.7.0/src/http/ngx_http_header_filter_module.c nginx-1.7.0-patched/src/http/ngx_http_header_filter_module.c
--- nginx-1.7.0/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
+++ nginx-1.7.0-patched/src/http/ngx_http_header_filter_module.c 2010-03-30 10:52:53.670909405 +0800
@@ -45,7 +45,7 @@
};
-static char ngx_http_server_string[] = "Server: nginx" CRLF;
+static char ngx_http_server_string[] = "Server: openresty" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

View File

@ -0,0 +1,44 @@
# HG changeset patch
# User Yichun Zhang <agentzh@gmail.com>
# Date 1390506359 28800
# Node ID 17186b98c235c07e94c64e5853689f790f173756
# Parent 4b50d1f299d8a69f3e3f7975132e1490352642fe
Variable: setting $args should invalidate unparsed uri.
diff -r 4b50d1f299d8 -r 17186b98c235 src/http/ngx_http_variables.c
--- a/src/http/ngx_http_variables.c Fri Jan 10 11:22:14 2014 -0800
+++ b/src/http/ngx_http_variables.c Thu Jan 23 11:45:59 2014 -0800
@@ -15,6 +15,8 @@
ngx_http_variable_value_t *v, uintptr_t data);
static void ngx_http_variable_request_set(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
+static void ngx_http_variable_request_args_set(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_variable_request_get_size(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
static void ngx_http_variable_request_set_size(ngx_http_request_t *r,
@@ -218,7 +220,7 @@
NGX_HTTP_VAR_NOCACHEABLE, 0 },
{ ngx_string("args"),
- ngx_http_variable_request_set,
+ ngx_http_variable_request_args_set,
ngx_http_variable_request,
offsetof(ngx_http_request_t, args),
NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
@@ -647,6 +649,15 @@
static void
+ngx_http_variable_request_args_set(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data)
+{
+ r->valid_unparsed_uri = 0;
+ ngx_http_variable_request_set(r, v, data);
+}
+
+
+static void
ngx_http_variable_request_set(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{

View File

@ -0,0 +1,138 @@
diff --git a/src/core/ngx_slab.c b/src/core/ngx_slab.c
index c3a27f7..1bde432 100644
--- a/src/core/ngx_slab.c
+++ b/src/core/ngx_slab.c
@@ -6,6 +6,7 @@
#include <ngx_config.h>
#include <ngx_core.h>
+#include <assert.h>
#define NGX_SLAB_PAGE_MASK 3
@@ -111,6 +112,7 @@ ngx_slab_init(ngx_slab_pool_t *pool)
ngx_memzero(p, pages * sizeof(ngx_slab_page_t));
pool->pages = (ngx_slab_page_t *) p;
+ pool->npages = pages;
pool->free.prev = 0;
pool->free.next = (ngx_slab_page_t *) p;
@@ -118,6 +120,7 @@ ngx_slab_init(ngx_slab_pool_t *pool)
pool->pages->slab = pages;
pool->pages->next = &pool->free;
pool->pages->prev = (uintptr_t) &pool->free;
+ pool->pages->prev_slab = 0;
pool->start = (u_char *)
ngx_align_ptr((uintptr_t) p + pages * sizeof(ngx_slab_page_t),
@@ -625,9 +628,16 @@ ngx_slab_alloc_pages(ngx_slab_pool_t *pool, ngx_uint_t pages)
if (page->slab >= pages) {
if (page->slab > pages) {
+ /* adjust the next adjacent block's "prev_slab" field */
+ p = &page[page->slab];
+ if (p < pool->pages + pool->npages) {
+ p->prev_slab = page->slab - pages;
+ }
+
page[pages].slab = page->slab - pages;
page[pages].next = page->next;
page[pages].prev = page->prev;
+ page[pages].prev_slab = pages;
p = (ngx_slab_page_t *) page->prev;
p->next = &page[pages];
@@ -651,6 +661,7 @@ ngx_slab_alloc_pages(ngx_slab_pool_t *pool, ngx_uint_t pages)
p->slab = NGX_SLAB_PAGE_BUSY;
p->next = NULL;
p->prev = NGX_SLAB_PAGE;
+ p->prev_slab = 0;
p++;
}
@@ -668,7 +679,7 @@ static void
ngx_slab_free_pages(ngx_slab_pool_t *pool, ngx_slab_page_t *page,
ngx_uint_t pages)
{
- ngx_slab_page_t *prev;
+ ngx_slab_page_t *prev, *p;
page->slab = pages--;
@@ -682,6 +693,53 @@ ngx_slab_free_pages(ngx_slab_pool_t *pool, ngx_slab_page_t *page,
page->next->prev = page->prev;
}
+ /* merge the next adjacent free block if it is free */
+
+ p = &page[page->slab];
+ if (p < pool->pages + pool->npages
+ && !(p->slab & NGX_SLAB_PAGE_START)
+ && p->next != NULL
+ && (p->prev & NGX_SLAB_PAGE_MASK) == NGX_SLAB_PAGE)
+ {
+ page->slab += p->slab;
+
+ /* remove the next adjacent block from the free list */
+
+ prev = (ngx_slab_page_t *) p->prev;
+ prev->next = p->next;
+ p->next->prev = p->prev;
+
+ /* adjust the "prev_slab" field in the next next adjacent block */
+ if (p + p->slab < pool->pages + pool->npages) {
+ p[p->slab].prev_slab = page->slab;
+ }
+
+ ngx_memzero(p, sizeof(ngx_slab_page_t));
+ }
+
+ if (page->prev_slab) {
+ /* merge the previous adjacent block if it is free */
+
+ p = page - page->prev_slab;
+ if (!(p->slab & NGX_SLAB_PAGE_START)
+ && p->next != NULL
+ && (p->prev & NGX_SLAB_PAGE_MASK) == NGX_SLAB_PAGE)
+ {
+ assert(p->slab == page->prev_slab);
+
+ p->slab += page->slab;
+ ngx_memzero(page, sizeof(ngx_slab_page_t));
+
+ /* adjust the "prev_slab" field in the next adjacent block */
+ if (p + p->slab < pool->pages + pool->npages) {
+ p[p->slab].prev_slab = p->slab;
+ }
+
+ /* skip adding "page" to the free list */
+ return;
+ }
+ }
+
page->prev = (uintptr_t) &pool->free;
page->next = pool->free.next;
diff --git a/src/core/ngx_slab.h b/src/core/ngx_slab.h
index c5e420b..287ac79 100644
--- a/src/core/ngx_slab.h
+++ b/src/core/ngx_slab.h
@@ -19,6 +19,8 @@ struct ngx_slab_page_s {
uintptr_t slab;
ngx_slab_page_t *next;
uintptr_t prev;
+ uintptr_t prev_slab;
+ /* number of pages for the previous adjacent block */
};
@@ -31,6 +33,8 @@ typedef struct {
ngx_slab_page_t *pages;
ngx_slab_page_t free;
+ ngx_uint_t npages;
+
u_char *start;
u_char *end;

View File

@ -0,0 +1,40 @@
diff -rudp nginx-1.7.0/src/http/ngx_http_upstream.c nginx-1.7.0-patched/src/http/ngx_http_upstream.c
--- nginx-1.7.0/src/http/ngx_http_upstream.c 2012-08-06 10:34:08.000000000 -0700
+++ nginx-1.7.0-patched/src/http/ngx_http_upstream.c 2012-12-05 14:46:41.741173058 -0800
@@ -1216,6 +1216,7 @@ ngx_http_upstream_connect(ngx_http_reque
}
u->request_sent = 0;
+ u->request_all_sent = 0;
if (rc == NGX_AGAIN) {
ngx_add_timer(c->write, u->conf->connect_timeout);
@@ -1418,6 +1419,8 @@ ngx_http_upstream_send_request(ngx_http_
/* rc == NGX_OK */
+ u->request_all_sent = 1;
+
if (c->tcp_nopush == NGX_TCP_NOPUSH_SET) {
if (ngx_tcp_push(c->fd) == NGX_ERROR) {
ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
@@ -1484,7 +1487,7 @@ ngx_http_upstream_send_request_handler(n
#endif
- if (u->header_sent) {
+ if (u->request_all_sent) {
u->write_event_handler = ngx_http_upstream_dummy_handler;
(void) ngx_handle_write_event(c->write, 0);
diff -rudp nginx-1.7.0/src/http/ngx_http_upstream.h nginx-1.7.0-patched/src/http/ngx_http_upstream.h
--- nginx-1.7.0/src/http/ngx_http_upstream.h 2012-02-13 03:01:58.000000000 -0800
+++ nginx-1.7.0-patched/src/http/ngx_http_upstream.h 2012-12-05 14:41:09.763514741 -0800
@@ -324,6 +324,7 @@ struct ngx_http_upstream_s {
unsigned keepalive:1;
unsigned request_sent:1;
+ unsigned request_all_sent:1;
unsigned header_sent:1;
};

View File

@ -0,0 +1,11 @@
--- src/http/ngx_http_spdy.c
+++ src/http/ngx_http_spdy.c
@@ -1849,7 +1849,7 @@ static u_char *
ngx_http_spdy_state_save(ngx_http_spdy_connection_t *sc,
u_char *pos, u_char *end, ngx_http_spdy_handler_pt handler)
{
-#if (NGX_DEBUG)
+#if 1
if (end - pos > NGX_SPDY_STATE_BUFFER_SIZE) {
ngx_log_error(NGX_LOG_ALERT, sc->connection->log, 0,
"spdy state buffer overflow: "

1642
t/sanity.t

File diff suppressed because it is too large Load Diff

35
util/configure vendored
View File

@ -51,7 +51,7 @@ if ($OS =~ /solaris|sunos/i) {
} elsif ($OS eq 'freebsd') {
$platform = $OS;
} elsif ($OS =~ /^(?:openbsd|netbsd)$/) {
} elsif ($OS =~ /^(?:openbsd|netbsd|dragonfly)$/) {
$platform = 'bsd';
} else {
@ -71,13 +71,14 @@ my @modules = (
[http_postgres => 'ngx_postgres', 'disabled'],
[http_srcache => 'srcache-nginx-module'],
[http_lua => 'ngx_lua'],
[http_lua_upstream => 'ngx_lua_upstream'],
[http_headers_more => 'headers-more-nginx-module'],
[http_array_var => 'array-var-nginx-module'],
[http_memc => 'memc-nginx-module'],
[http_redis2 => 'redis2-nginx-module'],
[http_redis => 'redis-nginx-module'],
#[http_upstream_keepalive => 'upstream-keepalive-nginx-module'],
[http_auth_request => 'auth-request-nginx-module'],
#[http_auth_request => 'auth-request-nginx-module'],
[http_rds_json => 'rds-json-nginx-module'],
[http_rds_csv => 'rds-csv-nginx-module'],
);
@ -185,9 +186,15 @@ for my $opt (@ARGV) {
} elsif ($opt eq '--without-lua_resty_lock') {
$resty_opts{no_lua_resty_lock} = 1;
} elsif ($opt eq '--without-lua_resty_lrucache') {
$resty_opts{no_lua_resty_lrucache} = 1;
} elsif ($opt eq '--without-lua_resty_core') {
$resty_opts{no_lua_resty_core} = 1;
} elsif ($opt eq '--without-lua_resty_upstream_healthcheck') {
$resty_opts{no_lua_resty_upstream_healthcheck} = 1;
} elsif ($opt eq '--without-lua_rds_parser') {
$resty_opts{no_lua_rds_parser} = 1;
@ -400,6 +407,7 @@ _END_
if (!$opts->{lua}
&& !$opts->{lua_path}
&& !$opts->{no_http_lua}
&& !$opts->{no_http_lua_upstream}
&& !$opts->{luajit_path})
{
$opts->{luajit} = 1;
@ -665,25 +673,27 @@ _EOC_
}
my $extra_opts = " DESTDIR=\$(DESTDIR) LUA_INCLUDE_DIR=$lua_inc " .
"LUA_LIB_DIR=$lualib_prefix";
"LUA_CMODULE_DIR=$lualib_prefix LUA_MODULE_DIR=$lualib_prefix";
if ($on_solaris) {
$extra_opts .= " INSTALL=$root_dir/build/install";
#$extra_opts .= " INSTALL=$root_dir/build/install";
if ($opts->{debug}) {
$extra_opts .= " CFLAGS=\"-g -O -Wall -pedantic -DMISSING_ISINF\"";
$extra_opts .= " CJSON_CFLAGS=\"-g -O -fpic -DUSE_INTERNAL_ISINF\"";
} else {
$extra_opts .= " CFLAGS=\"-g -O3 -Wall -pedantic -DMISSING_ISINF\"";
$extra_opts .= " CJSON_CFLAGS=\"-g -fpic -DUSE_INTERNAL_ISINF\"";
}
} else {
if ($opts->{debug}) {
$extra_opts .= " CFLAGS=\"-g -O -Wall -pedantic\"";
$extra_opts .= " CJSON_CFLAGS=\"-g -O -fpic\"";
} else {
$extra_opts .= " CJSON_CFLAGS=\"-g -fpic\"";
}
}
if ($platform eq 'macosx') {
$extra_opts .= " LDFLAGS='-bundle -undefined dynamic_lookup'";
$extra_opts .= " CJSON_LDFLAGS='-bundle -undefined dynamic_lookup'";
}
if (defined $cc) {
@ -794,10 +804,11 @@ _EOC_
}
for my $key (qw(dns memcached redis mysql string upload websocket
lock core))
lock lrucache core upstream_healthcheck))
{
unless ($opts->{"no_lua_resty_$key"}) {
my $name = "lua-resty-$key";
(my $key2 = $key) =~ s/_/-/g;
my $name = "lua-resty-$key2";
my $dir = auto_complete $name;
if (!defined $dir) {
die "No $name found";
@ -915,9 +926,12 @@ _EOC_
--without-lua_resty_redis disable the lua-resty-redis library
--without-lua_resty_mysql disable the lua-resty-mysql library
--without-lua_resty_upload disable the lua-resty-upload library
--without-lua_resty_upstream_healthcheck
disable the lua-resty-upstream-healthcheck library
--without-lua_resty_string disable the lua-resty-string library
--without-lua_resty_websocket disable the lua-resty-websocket library
--without-lua_resty_lock disable the lua-resty-lock library
--without-lua_resty_lrucache disable the lua-resty-lrucache library
--without-lua_resty_core disable the lua-resty-core library
--with-lua51 enable and build the bundled standard Lua 5.1 interpreter
@ -965,6 +979,7 @@ Options directly inherited from nginx
--with-http_dav_module enable ngx_http_dav_module
--with-http_flv_module enable ngx_http_flv_module
--with-http_gzip_static_module enable ngx_http_gzip_static_module
--with-http_auth_request_module enable ngx_http_auth_request_module
--with-http_random_index_module enable ngx_http_random_index_module
--with-http_secure_link_module enable ngx_http_secure_link_module
--with-http_degradation_module enable ngx_http_degradation_module

View File

@ -9,7 +9,7 @@ use Cwd qw/cwd/;
sub sh ($);
my %opts;
getopts("lf:", \%opts) or die "Usage: $0 [-f] <cores>\n";
getopts("lf:", \%opts) or die "Usage: $0 [-f] [-l] <cores>\n";
my $jobs = shift || 4;
@ -60,6 +60,7 @@ sh "sudo $prefix/nginx/sbin/nginx";
sh "curl -si localhost/lua|grep $lua";
sh "curl -si localhost/lua|grep $ver";
sh "curl -si localhost/lua|grep 'no pool'";
sh "curl -si localhost/cjson|grep 'json.safe: '";
sh "sudo $prefix/nginx/sbin/nginx -sstop";
warn "\n=== Normal Build ===\n";
@ -74,12 +75,17 @@ system "sudo killall nginx > /dev/null 2>&1";
sh "sudo $prefix/nginx/sbin/nginx";
sh "curl -si localhost/lua|grep $lua";
sh "curl -si localhost/lua|grep $ver";
sh "curl -si localhost/cjson|grep 'json.safe: '";
sh "sudo $prefix/nginx/sbin/nginx -sstop";
warn "\n=== Debug Build ===\n";
$prefix = "/usr/local/openresty-debug";
unless ($opts{f}) {
sh "./configure --with-debug $cfg_opts --prefix=$prefix -j$jobs > /dev/null";
my $more_cfg_opts = '';
if ($lua eq 'LuaJIT') {
$more_cfg_opts .= " --with-luajit-xcflags='-DLUA_USE_TRACE_LOGS'"
}
sh "./configure --with-debug $cfg_opts $more_cfg_opts --prefix=$prefix -j$jobs > /dev/null";
}
sh "$make -j$jobs > /dev/null";
sh "sudo $make install > /dev/null";
@ -89,6 +95,7 @@ system "sudo killall nginx > /dev/null 2>&1";
sh "sudo $prefix/nginx/sbin/nginx";
sh "curl -si localhost/lua|grep $lua";
sh "curl -si localhost/lua|grep $ver";
sh "curl -si localhost/cjson|grep 'json.safe: '";
sh "sudo $prefix/nginx/sbin/nginx -sstop";
warn "\n=== DTrace Build ===\n";
@ -104,6 +111,7 @@ system "sudo killall nginx > /dev/null 2>&1";
sh "sudo $prefix/nginx/sbin/nginx";
sh "curl -si localhost/lua|grep $lua";
sh "curl -si localhost/lua|grep $ver";
sh "curl -si localhost/cjson|grep 'json.safe: '";
if ($^O eq 'linux') {
sh "stap -L 'process(\"$prefix/nginx/sbin/nginx\").mark(\"*\")'|grep http__lua__coroutine__done";

View File

@ -32,6 +32,13 @@ cd nginx-$ver || exit 1
# patch the patch
answer=`$root/util/ver-ge "$main_ver" 1.5.12`
if [ "$answer" = "N" ]; then
echo "$info_txt applying the patch for nginx security advisory (CVE-2014-0133)"
patch -p0 < $root/patches/patch.2014.spdy2.txt || exit 1
echo
fi
echo "$info_txt applying the upstream-pipelining patch for nginx"
patch -p1 < $root/patches/nginx-$main_ver-upstream_pipelining.patch || exit 1
echo
@ -40,7 +47,7 @@ echo "$info_txt applying the server_header patch for nginx"
cp $root/patches/nginx-$main_ver-server_header.patch server_header.patch || exit 1
sed $"s/NGINX_VERSION \".unknown\"/NGINX_VERSION \".$minor_ver\"/" server_header.patch \
> server_header.patch.tmp && mv -f server_header.patch.tmp server_header.patch || exit 1
patch -p2 < server_header.patch || exit 1
patch -p1 < server_header.patch || exit 1
echo
#patch -p1 < $root/patches/nginx-$main_ver-redirect_memcpy_overlap.patch || exit 1
@ -134,9 +141,12 @@ if [ "$answer" = "N" ]; then
echo
fi
echo "$info_txt applying the slab_alloc_no_memory_as_info patch for nginx"
patch -p1 < $root/patches/nginx-$main_ver-slab_alloc_no_memory_as_info.patch || exit 1
echo
answer=`$root/util/ver-ge "$main_ver" 1.5.13`
if [ "$answer" = "N" ]; then
echo "$info_txt applying the slab_alloc_no_memory_as_info patch for nginx"
patch -p1 < $root/patches/nginx-$main_ver-slab_alloc_no_memory_as_info.patch || exit 1
echo
fi
answer=`$root/util/ver-ge "$main_ver" 1.2.7`
if [ "$answer" = "N" ]; then
@ -221,8 +231,19 @@ echo "$info_txt applying the pcre_conf_opt patch for nginx $ver"
patch -p1 < $root/patches/nginx-$ver-pcre_conf_opt.patch || exit 1
echo
echo "$info_txt applying the resolve-names-with-a-trailing-dot patch for nginx $ver"
patch -p1 < $root/patches/nginx-$ver-resolve-names-with-a-trailing-dot.patch || exit 1
answer=`$root/util/ver-ge "$main_ver" 1.5.9`
if [ "$answer" = "N" ]; then
echo "$info_txt applying the resolve-names-with-a-trailing-dot patch for nginx $ver"
patch -p1 < $root/patches/nginx-$ver-resolve-names-with-a-trailing-dot.patch || exit 1
echo
fi
echo "$info_txt applying the setting_args_invalidates_uri patch for nginx $ver"
patch -p1 < $root/patches/nginx-$ver-setting_args_invalidates_uri.patch || exit 1
echo
echo "$info_txt applying the slab_defrag patch for nginx"
patch -p1 < $root/patches/nginx-$main_ver-slab_defrag.patch || exit 1
echo
rm -f *.patch || exit 1
@ -238,17 +259,17 @@ rm -rf no-pool-nginx-$ver
#################################
ver=0.51
$root/util/get-tarball "https://github.com/agentzh/echo-nginx-module/tarball/v$ver" -O echo-nginx-module-$ver.tar.gz || exit 1
ver=0.53
$root/util/get-tarball "https://github.com/openresty/echo-nginx-module/tarball/v$ver" -O echo-nginx-module-$ver.tar.gz || exit 1
tar -xzf echo-nginx-module-$ver.tar.gz || exit 1
mv agentzh-echo-nginx-module-* echo-nginx-module-$ver || exit 1
mv openresty-echo-nginx-module-* echo-nginx-module-$ver || exit 1
#################################
ver=0.04
$root/util/get-tarball "https://github.com/agentzh/xss-nginx-module/tarball/v$ver" -O xss-nginx-module-$ver.tar.gz || exit 1
$root/util/get-tarball "https://github.com/openresty/xss-nginx-module/tarball/v$ver" -O xss-nginx-module-$ver.tar.gz || exit 1
tar -xzf xss-nginx-module-$ver.tar.gz || exit 1
mv agentzh-xss-nginx-module-* xss-nginx-module-$ver || exit 1
mv openresty-xss-nginx-module-* xss-nginx-module-$ver || exit 1
#################################
@ -260,69 +281,76 @@ mv simpl-ngx_devel_kit-* ngx_devel_kit-$ver || exit 1
#################################
ver=0.24
$root/util/get-tarball "https://github.com/agentzh/set-misc-nginx-module/tarball/v$ver" -O set-misc-nginx-module-$ver.tar.gz || exit 1
$root/util/get-tarball "https://github.com/openresty/set-misc-nginx-module/tarball/v$ver" -O set-misc-nginx-module-$ver.tar.gz || exit 1
tar -xzf set-misc-nginx-module-$ver.tar.gz || exit 1
mv agentzh-set-misc-nginx-module-* set-misc-nginx-module-$ver || exit 1
mv openresty-set-misc-nginx-module-* set-misc-nginx-module-$ver || exit 1
#################################
ver=0.13
$root/util/get-tarball "https://github.com/agentzh/rds-json-nginx-module/tarball/v$ver" -O rds-json-nginx-module-$ver.tar.gz || exit 1
$root/util/get-tarball "https://github.com/openresty/rds-json-nginx-module/tarball/v$ver" -O rds-json-nginx-module-$ver.tar.gz || exit 1
tar -xzf rds-json-nginx-module-$ver.tar.gz || exit 1
mv agentzh-rds-json-nginx-module-* rds-json-nginx-module-$ver || exit 1
mv openresty-rds-json-nginx-module-* rds-json-nginx-module-$ver || exit 1
#################################
ver=0.05
$root/util/get-tarball "https://github.com/agentzh/rds-csv-nginx-module/tarball/v$ver" -O rds-csv-nginx-module-$ver.tar.gz || exit 1
$root/util/get-tarball "https://github.com/openresty/rds-csv-nginx-module/tarball/v$ver" -O rds-csv-nginx-module-$ver.tar.gz || exit 1
tar -xzf rds-csv-nginx-module-$ver.tar.gz || exit 1
mv agentzh-rds-csv-nginx-module-* rds-csv-nginx-module-$ver || exit 1
mv openresty-rds-csv-nginx-module-* rds-csv-nginx-module-$ver || exit 1
#################################
ver=0.25
$root/util/get-tarball "https://github.com/agentzh/headers-more-nginx-module/tarball/v$ver" -O headers-more-nginx-module-$ver.tar.gz || exit 1
$root/util/get-tarball "https://github.com/openresty/headers-more-nginx-module/tarball/v$ver" -O headers-more-nginx-module-$ver.tar.gz || exit 1
tar -xzf headers-more-nginx-module-$ver.tar.gz || exit 1
mv agentzh-headers-more-nginx-module-* headers-more-nginx-module-$ver || exit 1
mv openresty-headers-more-nginx-module-* headers-more-nginx-module-$ver || exit 1
#################################
ver=0.1.7
$root/util/get-tarball "https://github.com/chaoslawful/drizzle-nginx-module/tarball/v$ver" -O drizzle-nginx-module-$ver.tar.gz || exit 1
$root/util/get-tarball "https://github.com/openresty/drizzle-nginx-module/tarball/v$ver" -O drizzle-nginx-module-$ver.tar.gz || exit 1
tar -xzf drizzle-nginx-module-$ver.tar.gz || exit 1
mv chaoslawful-drizzle-nginx-module-* drizzle-nginx-module-$ver || exit 1
mv openresty-drizzle-nginx-module-* drizzle-nginx-module-$ver || exit 1
#################################
ver=0.9.4
$root/util/get-tarball "https://github.com/chaoslawful/lua-nginx-module/tarball/v$ver" -O lua-nginx-module-$ver.tar.gz || exit 1
ver=0.9.8
$root/util/get-tarball "https://github.com/openresty/lua-nginx-module/tarball/v$ver" -O lua-nginx-module-$ver.tar.gz || exit 1
tar -xzf lua-nginx-module-$ver.tar.gz || exit 1
mv chaoslawful-lua-nginx-module-* ngx_lua-$ver || exit 1
mv openresty-lua-nginx-module-* ngx_lua-$ver || exit 1
#################################
ver=0.02
$root/util/get-tarball "https://github.com/openresty/lua-upstream-nginx-module/tarball/v$ver" -O lua-upstream-nginx-module-$ver.tar.gz || exit 1
tar -xzf lua-upstream-nginx-module-$ver.tar.gz || exit 1
mv openresty-lua-upstream-nginx-module-* ngx_lua_upstream-$ver || exit 1
#################################
ver=0.03
$root/util/get-tarball "https://github.com/agentzh/array-var-nginx-module/tarball/v$ver" -O array-var-nginx-module-$ver.tar.gz || exit 1
$root/util/get-tarball "https://github.com/openresty/array-var-nginx-module/tarball/v$ver" -O array-var-nginx-module-$ver.tar.gz || exit 1
tar -xzf array-var-nginx-module-$ver.tar.gz || exit 1
mv agentzh-array-var-nginx-module-* array-var-nginx-module-$ver || exit 1
mv openresty-array-var-nginx-module-* array-var-nginx-module-$ver || exit 1
#################################
ver=0.14
$root/util/get-tarball "https://github.com/agentzh/memc-nginx-module/tarball/v$ver" -O memc-nginx-module-$ver.tar.gz || exit 1
$root/util/get-tarball "https://github.com/openresty/memc-nginx-module/tarball/v$ver" -O memc-nginx-module-$ver.tar.gz || exit 1
tar -xzf memc-nginx-module-$ver.tar.gz || exit 1
mv agentzh-memc-nginx-module-* memc-nginx-module-$ver || exit 1
mv openresty-memc-nginx-module-* memc-nginx-module-$ver || exit 1
#################################
ver=0.25
$root/util/get-tarball "https://github.com/agentzh/srcache-nginx-module/tarball/v$ver" -O srcache-nginx-module-$ver.tar.gz || exit 1
ver=0.27
$root/util/get-tarball "https://github.com/openresty/srcache-nginx-module/tarball/v$ver" -O srcache-nginx-module-$ver.tar.gz || exit 1
tar -xzf srcache-nginx-module-$ver.tar.gz || exit 1
mv agentzh-srcache-nginx-module-* srcache-nginx-module-$ver || exit 1
mv openresty-srcache-nginx-module-* srcache-nginx-module-$ver || exit 1
#################################
ver=0.07
ver=0.08
$root/util/get-tarball "https://github.com/calio/form-input-nginx-module/tarball/v$ver" -O form-input-nginx-module-$ver.tar.gz || exit 1
tar -xzf form-input-nginx-module-$ver.tar.gz || exit 1
mv calio-form-input-nginx-module-* form-input-nginx-module-$ver || exit 1
@ -337,9 +365,9 @@ mv calio-iconv-nginx-module-* iconv-nginx-module-$ver || exit 1
#################################
ver=0.03
$root/util/get-tarball "https://github.com/agentzh/encrypted-session-nginx-module/tarball/v$ver" -O encrypted-session-nginx-module-$ver.tar.gz || exit 1
$root/util/get-tarball "https://github.com/openresty/encrypted-session-nginx-module/tarball/v$ver" -O encrypted-session-nginx-module-$ver.tar.gz || exit 1
tar -xzf encrypted-session-nginx-module-$ver.tar.gz || exit 1
mv agentzh-encrypted-session-nginx-module-* encrypted-session-nginx-module-$ver || exit 1
mv openresty-encrypted-session-nginx-module-* encrypted-session-nginx-module-$ver || exit 1
#################################
@ -351,13 +379,6 @@ mv agentzh-encrypted-session-nginx-module-* encrypted-session-nginx-module-$ver
#################################
ver=0.2
$root/util/get-tarball "http://mdounin.ru/files/ngx_http_auth_request_module-$ver.tar.gz" -O auth_request-$ver.tar.gz || exit 1
tar -xzf auth_request-$ver.tar.gz || exit 1
mv ngx_http_auth_request_module-* auth-request-nginx-module-$ver || exit 1
#################################
ver=0.3.7
$root/util/get-tarball "http://people.freebsd.org/~osa/ngx_http_redis-$ver.tar.gz" -O redis-nginx-module-$ver.tar.gz || exit 1
tar -xzf redis-nginx-module-$ver.tar.gz || exit 1
@ -384,10 +405,10 @@ mv FRiCKLE-ngx_coolkit-* ngx_coolkit-$ver || exit 1
#################################
ver=0.10
$root/util/get-tarball "https://github.com/agentzh/redis2-nginx-module/tarball/v$ver" -O redis2-nginx-module-$ver.tar.gz || exit 1
ver=0.11
$root/util/get-tarball "https://github.com/openresty/redis2-nginx-module/tarball/v$ver" -O redis2-nginx-module-$ver.tar.gz || exit 1
tar -xzf redis2-nginx-module-$ver.tar.gz || exit 1
mv agentzh-redis2-nginx-module-* redis2-nginx-module-$ver || exit 1
mv openresty-redis2-nginx-module-* redis2-nginx-module-$ver || exit 1
#################################
@ -417,8 +438,8 @@ echo
#################################
ver=2.1-20140109
$root/util/get-tarball "https://github.com/agentzh/luajit2/archive/v$ver.tar.gz" -O "LuaJIT-$ver.tar.gz" || exit 1
ver=2.1-20140607
$root/util/get-tarball "https://github.com/openresty/luajit2/archive/v$ver.tar.gz" -O "LuaJIT-$ver.tar.gz" || exit 1
tar -xzf LuaJIT-$ver.tar.gz || exit 1
mv luajit2-* LuaJIT-$ver || exit 1
@ -438,8 +459,8 @@ mv luajit2-* LuaJIT-$ver || exit 1
#################################
ver=1.0.3
$root/util/get-tarball "http://www.kyne.com.au/~mark/software/old/lua-cjson-$ver.tar.gz" -O "lua-cjson-$ver.tar.gz" || exit 1
ver=2.1.0.1
$root/util/get-tarball "https://github.com/openresty/lua-cjson/archive/$ver.tar.gz" -O "lua-cjson-$ver.tar.gz" || exit 1
tar -xzf lua-cjson-$ver.tar.gz || exit 1
cd lua-cjson-$ver || exit 1
#patch -p1 < $root/patches/lua_cjson-$ver-array_detection_fix.patch || exit 1
@ -448,79 +469,93 @@ cd ..
#################################
ver=0.10
$root/util/get-tarball "https://github.com/agentzh/lua-redis-parser/tarball/v$ver" -O "lua-redis-parser-$ver.tar.gz" || exit 1
$root/util/get-tarball "https://github.com/openresty/lua-redis-parser/tarball/v$ver" -O "lua-redis-parser-$ver.tar.gz" || exit 1
tar -xzf lua-redis-parser-$ver.tar.gz || exit 1
mv agentzh-lua-redis-parser-* lua-redis-parser-$ver || exit 1
mv openresty-lua-redis-parser-* lua-redis-parser-$ver || exit 1
#################################
ver=0.05
$root/util/get-tarball "https://github.com/agentzh/lua-rds-parser/tarball/v$ver" -O "lua-rds-parser-$ver.tar.gz" || exit 1
$root/util/get-tarball "https://github.com/openresty/lua-rds-parser/tarball/v$ver" -O "lua-rds-parser-$ver.tar.gz" || exit 1
tar -xzf lua-rds-parser-$ver.tar.gz || exit 1
mv agentzh-lua-rds-parser-* lua-rds-parser-$ver || exit 1
mv openresty-lua-rds-parser-* lua-rds-parser-$ver || exit 1
#################################
ver=0.11
$root/util/get-tarball "https://github.com/agentzh/lua-resty-dns/tarball/v$ver" -O "lua-resty-dns-$ver.tar.gz" || exit 1
$root/util/get-tarball "https://github.com/openresty/lua-resty-dns/tarball/v$ver" -O "lua-resty-dns-$ver.tar.gz" || exit 1
tar -xzf lua-resty-dns-$ver.tar.gz || exit 1
mv agentzh-lua-resty-dns-* lua-resty-dns-$ver || exit 1
mv openresty-lua-resty-dns-* lua-resty-dns-$ver || exit 1
#################################
ver=0.13
$root/util/get-tarball "https://github.com/agentzh/lua-resty-memcached/tarball/v$ver" -O "lua-resty-memcached-$ver.tar.gz" || exit 1
$root/util/get-tarball "https://github.com/openresty/lua-resty-memcached/tarball/v$ver" -O "lua-resty-memcached-$ver.tar.gz" || exit 1
tar -xzf lua-resty-memcached-$ver.tar.gz || exit 1
mv agentzh-lua-resty-memcached-* lua-resty-memcached-$ver || exit 1
mv openresty-lua-resty-memcached-* lua-resty-memcached-$ver || exit 1
#################################
ver=0.18
$root/util/get-tarball "https://github.com/agentzh/lua-resty-redis/tarball/v$ver" -O "lua-resty-redis-$ver.tar.gz" || exit 1
ver=0.20
$root/util/get-tarball "https://github.com/openresty/lua-resty-redis/tarball/v$ver" -O "lua-resty-redis-$ver.tar.gz" || exit 1
tar -xzf lua-resty-redis-$ver.tar.gz || exit 1
mv agentzh-lua-resty-redis-* lua-resty-redis-$ver || exit 1
mv openresty-lua-resty-redis-* lua-resty-redis-$ver || exit 1
#################################
ver=0.14
$root/util/get-tarball "https://github.com/agentzh/lua-resty-mysql/tarball/v$ver" -O "lua-resty-mysql-$ver.tar.gz" || exit 1
$root/util/get-tarball "https://github.com/openresty/lua-resty-mysql/tarball/v$ver" -O "lua-resty-mysql-$ver.tar.gz" || exit 1
tar -xzf lua-resty-mysql-$ver.tar.gz || exit 1
mv agentzh-lua-resty-mysql-* lua-resty-mysql-$ver || exit 1
mv openresty-lua-resty-mysql-* lua-resty-mysql-$ver || exit 1
#################################
ver=0.09
$root/util/get-tarball "https://github.com/agentzh/lua-resty-upload/tarball/v$ver" -O "lua-resty-upload-$ver.tar.gz" || exit 1
$root/util/get-tarball "https://github.com/openresty/lua-resty-upload/tarball/v$ver" -O "lua-resty-upload-$ver.tar.gz" || exit 1
tar -xzf lua-resty-upload-$ver.tar.gz || exit 1
mv agentzh-lua-resty-upload-* lua-resty-upload-$ver || exit 1
mv openresty-lua-resty-upload-* lua-resty-upload-$ver || exit 1
#################################
ver=0.08
$root/util/get-tarball "https://github.com/agentzh/lua-resty-string/tarball/v$ver" -O "lua-resty-string-$ver.tar.gz" || exit 1
ver=0.09
$root/util/get-tarball "https://github.com/openresty/lua-resty-string/tarball/v$ver" -O "lua-resty-string-$ver.tar.gz" || exit 1
tar -xzf lua-resty-string-$ver.tar.gz || exit 1
mv agentzh-lua-resty-string-* lua-resty-string-$ver || exit 1
mv openresty-lua-resty-string-* lua-resty-string-$ver || exit 1
#################################
ver=0.02
$root/util/get-tarball "https://github.com/agentzh/lua-resty-websocket/tarball/v$ver" -O "lua-resty-websocket-$ver.tar.gz" || exit 1
ver=0.03
$root/util/get-tarball "https://github.com/openresty/lua-resty-websocket/tarball/v$ver" -O "lua-resty-websocket-$ver.tar.gz" || exit 1
tar -xzf lua-resty-websocket-$ver.tar.gz || exit 1
mv agentzh-lua-resty-websocket-* lua-resty-websocket-$ver || exit 1
mv openresty-lua-resty-websocket-* lua-resty-websocket-$ver || exit 1
#################################
ver=0.02
$root/util/get-tarball "https://github.com/agentzh/lua-resty-lock/tarball/v$ver" -O "lua-resty-lock-$ver.tar.gz" || exit 1
ver=0.03
$root/util/get-tarball "https://github.com/openresty/lua-resty-lock/tarball/v$ver" -O "lua-resty-lock-$ver.tar.gz" || exit 1
tar -xzf lua-resty-lock-$ver.tar.gz || exit 1
mv agentzh-lua-resty-lock-* lua-resty-lock-$ver || exit 1
mv openresty-lua-resty-lock-* lua-resty-lock-$ver || exit 1
#################################
ver=0.0.3
$root/util/get-tarball "https://github.com/agentzh/lua-resty-core/tarball/v$ver" -O "lua-resty-core-$ver.tar.gz" || exit 1
ver=0.01
$root/util/get-tarball "https://github.com/openresty/lua-resty-lrucache/tarball/v$ver" -O "lua-resty-lrucache-$ver.tar.gz" || exit 1
tar -xzf lua-resty-lrucache-$ver.tar.gz || exit 1
mv openresty-lua-resty-lrucache-* lua-resty-lrucache-$ver || exit 1
#################################
ver=0.0.7
$root/util/get-tarball "https://github.com/openresty/lua-resty-core/tarball/v$ver" -O "lua-resty-core-$ver.tar.gz" || exit 1
tar -xzf lua-resty-core-$ver.tar.gz || exit 1
mv agentzh-lua-resty-core-* lua-resty-core-$ver || exit 1
mv openresty-lua-resty-core-* lua-resty-core-$ver || exit 1
#################################
ver=0.01
$root/util/get-tarball "https://github.com/openresty/lua-resty-upstream-healthcheck/tarball/v$ver" -O "lua-resty-upstream-healthcheck-$ver.tar.gz" || exit 1
tar -xzf lua-resty-upstream-healthcheck-$ver.tar.gz || exit 1
mv openresty-lua-resty-upstream-healthcheck-* lua-resty-upstream-healthcheck-$ver || exit 1
#################################

View File

@ -1,6 +1,6 @@
#!/bin/bash
main_ver=1.5.8
main_ver=1.7.0
minor_ver=1
version=$main_ver.$minor_ver
echo $version