Compare commits

..

44 Commits

Author SHA1 Message Date
1bac07b50c upgraded ngx_rds_json to 0.12rc3; released ngx_openresty 1.0.6.5. 2011-09-15 18:30:55 +08:00
b371fdf602 upgraded ngx_lua to 0.3.1rc3, ngx_echo to 0.37rc4, and ngx_headers_more to 0.16rc2; released ngx_openresty 1.0.6.3. 2011-09-14 16:01:29 +08:00
98d6ac88ae checked in the upgrade-patches.pl script. 2011-09-08 16:02:11 +08:00
f616ce37da upgraded ngx_lua to 0.3.1rc1; released ngx_openresty 1.0.6.1. 2011-09-08 15:58:59 +08:00
058842eac3 added the no_error_pages patch for nginx 1.1.2. 2011-09-06 09:08:45 +08:00
974c82a8ae upgraded ngx_headers_more to 0.16rc1; released ngx_openresty 1.0.6.0rc2. 2011-09-04 16:21:57 +08:00
eb28777e10 released 1.0.6.0rc1. 2011-09-04 16:15:02 +08:00
aefb91544b upgraded ngx_lua to v0.3.0; released ngx_openresty 1.0.5.1. 2011-09-04 11:57:17 +08:00
39f8be8a07 upgraded ngx_lua to v0.2.1rc22; released ngx_openresty 1.0.5.1rc14. 2011-09-02 12:23:28 +08:00
36e95ce62e updated ngx_lua to rc21. 2011-09-01 23:50:43 +08:00
3afa06f29d upgraded ngx_lua to v0.2.1rc20 and ngx_echo to 0.37rc2; released 1.0.5.1rc13. 2011-09-01 22:08:23 +08:00
da9a356adc upgraded lua-rds-parser to 0.03; released ngx_openresty 1.0.5.1rc12. 2011-08-31 15:29:37 +08:00
a979e3eaab now we bundle lua-rds-parser too :) 2011-08-31 13:57:49 +08:00
907bf9f19e now we bundle the ngx_rds_csv module as well. 2011-08-31 13:12:44 +08:00
78674fd211 upgraded ngx_rds_json to 0.12rc2; released ngx_openresty 1.0.5.1rc11. 2011-08-30 16:48:16 +08:00
08d54b1eb8 Merge branch 'master' of github.com:agentzh/ngx_openresty 2011-08-29 16:43:38 +08:00
5c7d2b3823 upgraded lua-redis-parser to 1.0.5.1rc10. released ngx_openresty 1.0.5.1rc10. 2011-08-29 16:43:20 +08:00
c07cf89ac4 updated spec file for ngx_openresty 2011-08-29 11:39:33 +08:00
cd83ed0590 upgraded ngx_lua to v0.2.1rc19; released ngx_openresty 1.0.5.1rc9. 2011-08-27 23:42:22 +08:00
60798ca728 upgraded ngx_lua to v0.2.1rc18; released ngx_openresty 1.0.5.1rc8. 2011-08-26 16:53:28 +08:00
baa293d434 upgraded ngx_lua to v0.2.1rc17; released ngx_openresty 1.0.5.1rc7. 2011-08-26 11:58:27 +08:00
b7c7c6e64e Merge branch 'master' of github.com:agentzh/ngx_openresty 2011-08-25 00:31:58 +08:00
0140c1130a upgraded ngx_lua to 0.2.1rc16; released ngx_openresty 1.0.5.1rc6. 2011-08-25 00:31:37 +08:00
b44ceb748a added spec template for ngx_openresty 2011-08-24 20:16:09 +08:00
7f45ae0f10 upgraded ngx_lua to v0.2.1rc15; released ngx_openresty 1.0.5.1rc5. 2011-08-24 17:57:15 +08:00
50f13caa09 upgraded ngx_lua to 0.2.1rc14; released ngx_openresty 1.0.5.1rc4. 2011-08-24 12:51:29 +08:00
26d6e9a6b5 upgraded ngx_lua to 0.2.1rc13 and ngx_drizzle to 0.1.1rc4; released ngx_openresty 1.0.5.1rc3. 2011-08-24 00:41:00 +08:00
ba41f86c02 upgraded ngx_lua to v0.2.1rc12; released ngx_openresty 1.0.5.1rc2. 2011-08-18 20:48:37 +08:00
83280c1280 upgraded ngx_lua to v0.2.1rc11; released ngx_openresty 1.0.5.1rc1. 2011-08-17 00:13:40 +08:00
5c92a4a240 bumped version number to 1.0.5.0. 2011-08-16 17:43:50 +08:00
85dab85e31 updated the tet suite to reflect recent changes. 2011-08-16 17:20:09 +08:00
041548dad9 upgraded ngx_lua to v0.2.1rc9; released ngx_openresty 1.0.5.0rc7. 2011-08-13 18:49:11 +08:00
1d9549b812 upgraded ngx_lua to v0.2.1rc8; released ngx_openresty 1.0.5.0rc6. 2011-08-13 18:33:12 +08:00
1510009c10 upgraded ngx_lua to v0.2.1rc7; released ngx_openresty 1.0.5.0rc5. 2011-08-12 16:43:31 +08:00
5d875abbf7 upgraded ngx_lua to v0.2.1rc6; released ngx_openresty 1.0.5.0rc5. 2011-08-12 14:58:30 +08:00
3a3bcf1cfc upgraded ngx_lua to v0.2.1rc5; released ngx_openresty 1.0.5.0rc4. 2011-08-12 09:46:05 +08:00
030ffab7d2 now we bundle the lua-redis-parser library with us and it is enabled by default. tested on Linux i386, Linux x86_64, Mac OS X, FreeBSD 8.2 i386, and Solaris 11; added the new option --without-lua_redis_parser to the ./configure script; made the test scaffold emit .t_ file with actual outputs as the expected outputs; released ngx_openresty 1.0.5.0rc3. 2011-08-11 10:04:13 +08:00
a3dfc21c1a documented the --without-lua_cjson option in the ./configure usage output. released ngx_openresty 1.0.5.0rc2. 2011-08-10 18:14:18 +08:00
d283e90962 made lua-cjson honor the --with-debug option; updated the test suite to reflect recent changes. 2011-08-10 17:48:02 +08:00
3aedf4d8e5 added -d option to util/install and also made the -m option optional. fixed compatibility issue on Solaris with lua-cjson: there is no isinf on Solaris 11. 2011-08-10 14:59:16 +08:00
32ef993e05 more progress on lua-cjson bundling. it now works on Mac OS X, FreeBSD, and Linux, at least. 2011-08-10 10:44:17 +08:00
6a75ebc5b0 lua-cjson is now bundled and enabled by default. it is working on Linux. 2011-08-09 23:46:50 +08:00
636ef91bed merged the nginx-1.0.5 branch back to master. 2011-08-09 22:01:42 +08:00
239d3e4109 upgraded the nginx core to 1.0.5. 2011-08-08 22:00:14 +08:00
26 changed files with 2720 additions and 164 deletions

View File

@ -0,0 +1,13 @@
diff --git a/lua_cjson.c b/lua_cjson.c
index 4b1915a..b46e915 100644
--- a/lua_cjson.c
+++ b/lua_cjson.c
@@ -501,7 +501,7 @@ static int lua_array_length(lua_State *l, json_config_t *cfg)
/* table, startkey */
while (lua_next(l, -2) != 0) {
/* table, key, value */
- if (lua_isnumber(l, -2) &&
+ if (lua_type(l, -2) == LUA_TNUMBER &&
(k = lua_tonumber(l, -2))) {
/* Integer >= 1 ? */
if (floor(k) == k && k >= 1) {

View File

@ -0,0 +1,24 @@
diff -ur nginx-1.0.5/auto/cc/gcc nginx-1.0.5-patched/auto/cc/gcc
--- nginx-1.0.5/auto/cc/gcc 2011-06-27 19:53:00.205737804 +0800
+++ nginx-1.0.5-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.0.5/auto/cc/icc nginx-1.0.5-patched/auto/cc/icc
--- nginx-1.0.5/auto/cc/icc 2011-06-27 19:52:56.370157068 +0800
+++ nginx-1.0.5-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.0.5/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
+++ nginx-1.0.5-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,483 @@
diff -ur nginx-1.0.5/src/core/nginx.h nginx-1.0.5-no-pool/src/core/nginx.h
--- nginx-1.0.5/src/core/nginx.h 2011-05-26 15:31:40.000000000 +0800
+++ nginx-1.0.5-no-pool/src/core/nginx.h 2011-06-30 17:00:43.540946999 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1000004
#define NGINX_VERSION "1.0.5"
-#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown (no pool)"
#define NGINX_VAR "NGINX"
#define NGX_OLDPID_EXT ".oldbin"
diff -ur nginx-1.0.5/src/core/ngx_array.c nginx-1.0.5-no-pool/src/core/ngx_array.c
--- nginx-1.0.5/src/core/ngx_array.c 2008-06-17 23:00:30.000000000 +0800
+++ nginx-1.0.5-no-pool/src/core/ngx_array.c 2011-06-30 17:00:43.540946999 +0800
@@ -39,13 +39,7 @@
p = a->pool;
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last) {
- p->d.last -= a->size * a->nalloc;
- }
-
- if ((u_char *) a + sizeof(ngx_array_t) == p->d.last) {
- p->d.last = (u_char *) a;
- }
+ ngx_pfree(p, a);
}
@@ -64,29 +58,17 @@
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);
+ a->elts = new;
+ a->nalloc *= 2;
+
}
elt = (u_char *) a->elts + a->size * a->nelts;
@@ -112,31 +94,16 @@
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);
+ a->elts = new;
+ a->nalloc = nalloc;
}
elt = (u_char *) a->elts + a->size * a->nelts;
diff -ur nginx-1.0.5/src/core/ngx_palloc.c nginx-1.0.5-no-pool/src/core/ngx_palloc.c
--- nginx-1.0.5/src/core/ngx_palloc.c 2009-12-17 20:25:46.000000000 +0800
+++ nginx-1.0.5-no-pool/src/core/ngx_palloc.c 2011-06-30 17:06:36.060946999 +0800
@@ -8,24 +8,31 @@
#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;
+ ngx_pool_data_t *d;
- 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;
+ d = ngx_alloc(sizeof(ngx_pool_data_t), log);
+
+ if (d == NULL) {
+ return NULL;
+ }
+
+ d->next = d;
+ d->prev = d;
+ d->alloc = NULL;
+ p->d = d;
size = size - sizeof(ngx_pool_t);
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
@@ -43,7 +50,7 @@
void
ngx_destroy_pool(ngx_pool_t *pool)
{
- ngx_pool_t *p, *n;
+ ngx_pool_data_t *d, *n;
ngx_pool_large_t *l;
ngx_pool_cleanup_t *c;
@@ -55,7 +62,7 @@
}
}
- for (l = pool->large; l; l = l->next) {
+ for (l = pool->large; l ; l = l->next) {
ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
@@ -71,34 +78,45 @@
* so we can not use this log while the 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", d);
- if (n == NULL) {
+ if (n == pool->d) {
break;
}
}
#endif
+ if (pool->d->next == pool->d) {
+ ngx_free(pool->d);
+ } else {
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
+ if (d->alloc) {
+ ngx_free(d->alloc);
+ }
+ ngx_free(d);
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
- ngx_free(p);
-
- if (n == NULL) {
- break;
+ if (n == pool->d) {
+ break;
+ }
}
}
+
+ ngx_free(pool);
}
void
ngx_reset_pool(ngx_pool_t *pool)
{
- ngx_pool_t *p;
- ngx_pool_large_t *l;
+ ngx_pool_data_t *p, *tmp;
+ ngx_pool_large_t *l;
+
+ for (l = pool->large; l ; l = l->next) {
+
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
- for (l = pool->large; l; l = l->next) {
if (l->alloc) {
ngx_free(l->alloc);
}
@@ -106,109 +124,65 @@
pool->large = NULL;
- for (p = pool; p; p = p->d.next) {
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
+ p = pool->d->next;
+ while (p != pool->d) {
+ tmp = p;
+ ngx_free(p->alloc);
+ p->prev->next = p->next;
+ p->next->prev = p->prev;
+ p = p->next;
+ ngx_free(tmp);
}
-}
+ ngx_free(pool->d->alloc);
+ pool->d->alloc = NULL;
+
+}
void *
-ngx_palloc(ngx_pool_t *pool, size_t size)
+ngx_malloc(ngx_pool_t *pool, size_t size)
{
- u_char *m;
- ngx_pool_t *p;
-
- if (size <= pool->max) {
+ ngx_pool_data_t *new;
+ void *m;
- 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;
- }
-
- p = p->d.next;
-
- } while (p);
+ m = ngx_alloc(size, pool->log);
+ if (m == NULL) {
+ return NULL;
+ }
- return ngx_palloc_block(pool, size);
+ new = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
+ if (new == NULL){
+ ngx_free(m);
+ return NULL;
}
- return ngx_palloc_large(pool, size);
+ new->alloc = m;
+ new->next = pool->d;
+ new->prev = pool->d->prev;
+ pool->d->prev->next = new;
+ pool->d->prev = new;
+ return m;
}
-
void *
-ngx_pnalloc(ngx_pool_t *pool, size_t size)
+ngx_palloc(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;
-
- return m;
- }
-
- p = p->d.next;
-
- } while (p);
-
- return ngx_palloc_block(pool, size);
+ if (size <= 1024) {
+ return ngx_malloc(pool, size);
}
return ngx_palloc_large(pool, size);
}
-static void *
-ngx_palloc_block(ngx_pool_t *pool, size_t size)
+void *
+ngx_pnalloc(ngx_pool_t *pool, size_t size)
{
- u_char *m;
- size_t psize;
- ngx_pool_t *p, *new, *current;
-
- psize = (size_t) (pool->d.end - (u_char *) pool);
-
- m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
- if (m == NULL) {
- return NULL;
+ if (size <= 1024) {
+ return ngx_malloc(pool, size);
}
- 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;
- }
- }
-
- p->d.next = new;
-
- pool->current = current ? current : new;
-
- return m;
+ return ngx_palloc_large(pool, size);
}
@@ -226,18 +200,7 @@
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));
+ large = ngx_malloc(pool, sizeof(ngx_pool_large_t));
if (large == NULL) {
ngx_free(p);
return NULL;
@@ -262,7 +225,7 @@
return NULL;
}
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
+ large = ngx_malloc(pool, sizeof(ngx_pool_large_t));
if (large == NULL) {
ngx_free(p);
return NULL;
@@ -279,17 +242,41 @@
ngx_int_t
ngx_pfree(ngx_pool_t *pool, void *p)
{
- ngx_pool_large_t *l;
+ ngx_pool_large_t *l;
+ ngx_pool_large_t *ll;
+ ngx_pool_data_t *d, *n;
- for (l = pool->large; l; l = l->next) {
+ for (l = pool->large, ll = l; l; ll = 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;
+ if (l == pool->large) {
+ pool->large = NULL;
+ }
+
+ ll->next = l->next;
+ p = l;
+ break;
+ }
+ }
+ for (d = pool->d, n = d->next; ; d = n, n = d->next) {
+ if (p == d->alloc) {
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", d->alloc);
+ if (d->alloc) {
+ ngx_free(d->alloc);
+ }
+ d->alloc = NULL;
+ d->prev->next = d->next;
+ d->next->prev = d->prev;
+ ngx_free(d);
return NGX_OK;
}
+ if (d->next == pool->d) {
+ break;
+ }
}
return NGX_DECLINED;
Only in nginx-1.0.5-no-pool/src/core: ngx_palloc.c~
diff -ur nginx-1.0.5/src/core/ngx_palloc.h nginx-1.0.5-no-pool/src/core/ngx_palloc.h
--- nginx-1.0.5/src/core/ngx_palloc.h 2009-12-17 20:25:46.000000000 +0800
+++ nginx-1.0.5-no-pool/src/core/ngx_palloc.h 2011-06-30 17:00:43.540946999 +0800
@@ -38,6 +38,7 @@
typedef struct ngx_pool_large_s ngx_pool_large_t;
+typedef struct ngx_pool_data_s ngx_pool_data_t;
struct ngx_pool_large_s {
ngx_pool_large_t *next;
@@ -45,16 +46,15 @@
};
-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;
+ ngx_pool_data_t *prev;
+ 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;

View File

@ -0,0 +1,27 @@
# HG changeset patch
# User Maxim Dounin <mdounin@mdounin.ru>
# Date 1309799136 -14400
# Node ID 99e276bba8596bc4df9e638482ee413f4c6bf700
# Parent e7b2f945d55ae44a2295facf9e3336dc4633e5b5
Core: fix body with request_body_in_single_buf.
If there were preread data and request body was big enough first part
of request body was duplicated.
See report here:
http://nginx.org/pipermail/nginx/2011-July/027756.html
diff --git a/src/http/ngx_http_request_body.c b/src/http/ngx_http_request_body.c
--- a/src/http/ngx_http_request_body.c
+++ b/src/http/ngx_http_request_body.c
@@ -372,7 +372,9 @@ ngx_http_do_read_client_request_body(ngx
}
}
- if (r->request_body_in_file_only && rb->bufs->next) {
+ if (rb->bufs->next
+ && (r->request_body_in_file_only || r->request_body_in_single_buf))
+ {
rb->bufs = rb->bufs->next;
}

View File

@ -0,0 +1,17 @@
# HG changeset patch
# User Maxim Dounin <mdounin@mdounin.ru>
# Date 1309776931 -14400
# Node ID e7b2f945d55ae44a2295facf9e3336dc4633e5b5
# Parent 610e909bb9e29766188aa86fae3abe0bd3432940
Core: fix body if it's preread and there are extra data.
--- nginx-1.0.5/src/http/ngx_http_request_body.c 2011-07-05 12:11:21.619264633 +0800
+++ nginx-1.0.5-patched/src/http/ngx_http_request_body.c 2011-07-05 12:14:30.694321554 +0800
@@ -141,6 +141,7 @@
/* the whole request body was pre-read */
+ b->last = b->pos + r->headers_in.content_length_n;
r->header_in->pos += (size_t) r->headers_in.content_length_n;
r->request_length += r->headers_in.content_length_n;

View File

@ -0,0 +1,26 @@
diff -ur lz-nginx-1.0.5/nginx-1.0.5/src/core/nginx.h lz-nginx-1.0.5-patched/nginx-1.0.5/src/core/nginx.h
--- lz-nginx-1.0.5/nginx-1.0.5/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
+++ lz-nginx-1.0.5-patched/nginx-1.0.5/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1000005
#define NGINX_VERSION "1.0.5"
-#define NGINX_VER "nginx/" NGINX_VERSION
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
#define NGINX_VAR "NGINX"
#define NGX_OLDPID_EXT ".oldbin"
Only in lz-nginx-1.0.5-patched/nginx-1.0.5/src/core: nginx.h.orig
Only in lz-nginx-1.0.5-patched/nginx-1.0.5/src/core: nginx.h.rej
diff -ur lz-nginx-1.0.5/nginx-1.0.5/src/http/ngx_http_header_filter_module.c lz-nginx-1.0.5-patched/nginx-1.0.5/src/http/ngx_http_header_filter_module.c
--- lz-nginx-1.0.5/nginx-1.0.5/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
+++ lz-nginx-1.0.5-patched/nginx-1.0.5/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: ngx_openresty" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

View File

@ -0,0 +1,40 @@
# HG changeset patch
# User Maxim Dounin <mdounin@mdounin.ru>
# Date 1309187571 -14400
# Node ID 283a416b2235d5383c12a975edc8866f007fb628
# Parent f5fc40783ddcbf4db33859ee2a9bce54cf32c350
Core: protect from subrequest loops.
Without protection subrequest loop results in r->count overflow and
SIGSEGV. Protection was broken in 0.7.25.
Note that this also limits number of parallel subrequests. This
wasn't exactly the case before 0.7.25 as local subrequests were
completed directly.
See here for details:
http://nginx.org/pipermail/nginx-ru/2010-February/032184.html
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -2287,7 +2287,6 @@ ngx_http_subrequest(ngx_http_request_t *
sr->start_sec = tp->sec;
sr->start_msec = tp->msec;
- r->main->subrequests++;
r->main->count++;
*psr = sr;
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -1981,6 +1981,7 @@ ngx_http_finalize_request(ngx_http_reque
if (r == c->data) {
r->main->count--;
+ r->main->subrequests++;
if (!r->logged) {

View File

@ -0,0 +1,69 @@
# HG changeset patch
# User Maxim Dounin <mdounin@mdounin.ru>
# Date 1315324342 -14400
# Node ID 4cf0af103bc382a78f894302d1706929a79df4bb
# Parent d603ce98fada855f0100b422b7b5672fd22fabea
Gzip filter: handle empty flush buffers.
Empty flush buffers are legitimate and may happen e.g. due to $r->flush()
calls in embedded perl. If there are no data buffered in zlib deflate()
will return Z_BUF_ERROR (i.e. no progress possible) without adding anything
to output. Don't treat Z_BUF_ERROR as fatal and correctly send empty flush
buffer if we have no data in output at all.
See this thread for details:
http://mailman.nginx.org/pipermail/nginx/2010-November/023693.html
diff --git a/src/http/modules/ngx_http_gzip_filter_module.c b/src/http/modules/ngx_http_gzip_filter_module.c
--- a/src/http/modules/ngx_http_gzip_filter_module.c
+++ b/src/http/modules/ngx_http_gzip_filter_module.c
@@ -758,6 +758,7 @@ static ngx_int_t
ngx_http_gzip_filter_deflate(ngx_http_request_t *r, ngx_http_gzip_ctx_t *ctx)
{
int rc;
+ ngx_buf_t *b;
ngx_chain_t *cl;
ngx_http_gzip_conf_t *conf;
@@ -769,7 +770,7 @@ ngx_http_gzip_filter_deflate(ngx_http_re
rc = deflate(&ctx->zstream, ctx->flush);
- if (rc != Z_OK && rc != Z_STREAM_END) {
+ if (rc != Z_OK && rc != Z_STREAM_END && rc != Z_BUF_ERROR) {
ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
"deflate() failed: %d, %d", ctx->flush, rc);
return NGX_ERROR;
@@ -818,8 +819,6 @@ ngx_http_gzip_filter_deflate(ngx_http_re
if (ctx->flush == Z_SYNC_FLUSH) {
- ctx->zstream.avail_out = 0;
- ctx->out_buf->flush = 1;
ctx->flush = Z_NO_FLUSH;
cl = ngx_alloc_chain_link(r->pool);
@@ -827,7 +826,22 @@ ngx_http_gzip_filter_deflate(ngx_http_re
return NGX_ERROR;
}
- cl->buf = ctx->out_buf;
+ b = ctx->out_buf;
+
+ if (ngx_buf_size(b) == 0) {
+
+ b = ngx_calloc_buf(ctx->request->pool);
+ if (b == NULL) {
+ return NGX_ERROR;
+ }
+
+ } else {
+ ctx->zstream.avail_out = 0;
+ }
+
+ b->flush = 1;
+
+ cl->buf = b;
cl->next = NULL;
*ctx->last_out = cl;
ctx->last_out = &cl->next;

View File

@ -0,0 +1,24 @@
diff -ur nginx-1.0.6/auto/cc/gcc nginx-1.0.6-patched/auto/cc/gcc
--- nginx-1.0.6/auto/cc/gcc 2011-06-27 19:53:00.205737804 +0800
+++ nginx-1.0.6-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.0.6/auto/cc/icc nginx-1.0.6-patched/auto/cc/icc
--- nginx-1.0.6/auto/cc/icc 2011-06-27 19:52:56.370157068 +0800
+++ nginx-1.0.6-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.0.6/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
+++ nginx-1.0.6-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,504 @@
diff -ur nginx-1.0.6/src/core/nginx.h nginx-1.0.6-patched/src/core/nginx.h
--- nginx-1.0.6/src/core/nginx.h 2011-08-29 17:30:22.000000000 +0800
+++ nginx-1.0.6-patched/src/core/nginx.h 2011-09-13 12:11:03.135622101 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1000006
#define NGINX_VERSION "1.0.6"
-#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown (no pool)"
#define NGINX_VAR "NGINX"
diff -ur nginx-1.0.6/src/core/ngx_array.c nginx-1.0.6-patched/src/core/ngx_array.c
--- nginx-1.0.6/src/core/ngx_array.c 2008-06-17 23:00:30.000000000 +0800
+++ nginx-1.0.6-patched/src/core/ngx_array.c 2011-09-14 12:02:56.263128538 +0800
@@ -39,13 +39,7 @@
p = a->pool;
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last) {
- p->d.last -= a->size * a->nalloc;
- }
-
- if ((u_char *) a + sizeof(ngx_array_t) == p->d.last) {
- p->d.last = (u_char *) a;
- }
+ ngx_pfree(p, a);
}
@@ -64,29 +58,17 @@
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);
+ a->elts = new;
+ a->nalloc *= 2;
+
}
elt = (u_char *) a->elts + a->size * a->nelts;
@@ -100,43 +82,25 @@
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;
-
if (a->nelts + n > a->nalloc) {
/* the array is full */
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);
+ a->elts = new;
+ a->nalloc = nalloc;
}
elt = (u_char *) a->elts + a->size * a->nelts;
diff -ur nginx-1.0.6/src/core/ngx_palloc.c nginx-1.0.6-patched/src/core/ngx_palloc.c
--- nginx-1.0.6/src/core/ngx_palloc.c 2009-12-17 20:25:46.000000000 +0800
+++ nginx-1.0.6-patched/src/core/ngx_palloc.c 2011-09-14 12:03:41.663126519 +0800
@@ -8,24 +8,31 @@
#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;
+ ngx_pool_data_t *d;
- 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;
+ d = ngx_alloc(sizeof(ngx_pool_data_t), log);
+
+ if (d == NULL) {
+ return NULL;
+ }
+
+ d->next = d;
+ d->prev = d;
+ d->alloc = NULL;
+ p->d = d;
size = size - sizeof(ngx_pool_t);
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
@@ -43,7 +50,7 @@
void
ngx_destroy_pool(ngx_pool_t *pool)
{
- ngx_pool_t *p, *n;
+ ngx_pool_data_t *d, *n;
ngx_pool_large_t *l;
ngx_pool_cleanup_t *c;
@@ -55,7 +62,7 @@
}
}
- for (l = pool->large; l; l = l->next) {
+ for (l = pool->large; l ; l = l->next) {
ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
@@ -71,34 +78,45 @@
* so we can not use this log while the 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", d);
- if (n == NULL) {
+ if (n == pool->d) {
break;
}
}
#endif
+ if (pool->d->next == pool->d) {
+ ngx_free(pool->d);
+ } else {
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
+ if (d->alloc) {
+ ngx_free(d->alloc);
+ }
+ ngx_free(d);
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
- ngx_free(p);
-
- if (n == NULL) {
- break;
+ if (n == pool->d) {
+ break;
+ }
}
}
+
+ ngx_free(pool);
}
void
ngx_reset_pool(ngx_pool_t *pool)
{
- ngx_pool_t *p;
- ngx_pool_large_t *l;
+ ngx_pool_data_t *p, *tmp;
+ ngx_pool_large_t *l;
+
+ for (l = pool->large; l ; l = l->next) {
+
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
- for (l = pool->large; l; l = l->next) {
if (l->alloc) {
ngx_free(l->alloc);
}
@@ -106,109 +124,65 @@
pool->large = NULL;
- for (p = pool; p; p = p->d.next) {
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
+ p = pool->d->next;
+ while (p != pool->d) {
+ tmp = p;
+ ngx_free(p->alloc);
+ p->prev->next = p->next;
+ p->next->prev = p->prev;
+ p = p->next;
+ ngx_free(tmp);
}
-}
+ ngx_free(pool->d->alloc);
+ pool->d->alloc = NULL;
+
+}
void *
-ngx_palloc(ngx_pool_t *pool, size_t size)
+ngx_malloc(ngx_pool_t *pool, size_t size)
{
- u_char *m;
- ngx_pool_t *p;
-
- if (size <= pool->max) {
+ ngx_pool_data_t *new;
+ void *m;
- 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;
- }
-
- p = p->d.next;
-
- } while (p);
+ m = ngx_alloc(size, pool->log);
+ if (m == NULL) {
+ return NULL;
+ }
- return ngx_palloc_block(pool, size);
+ new = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
+ if (new == NULL){
+ ngx_free(m);
+ return NULL;
}
- return ngx_palloc_large(pool, size);
+ new->alloc = m;
+ new->next = pool->d;
+ new->prev = pool->d->prev;
+ pool->d->prev->next = new;
+ pool->d->prev = new;
+ return m;
}
-
void *
-ngx_pnalloc(ngx_pool_t *pool, size_t size)
+ngx_palloc(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;
-
- return m;
- }
-
- p = p->d.next;
-
- } while (p);
-
- return ngx_palloc_block(pool, size);
+ if (size <= 1024) {
+ return ngx_malloc(pool, size);
}
return ngx_palloc_large(pool, size);
}
-static void *
-ngx_palloc_block(ngx_pool_t *pool, size_t size)
+void *
+ngx_pnalloc(ngx_pool_t *pool, size_t size)
{
- u_char *m;
- size_t psize;
- ngx_pool_t *p, *new, *current;
-
- psize = (size_t) (pool->d.end - (u_char *) pool);
-
- m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
- if (m == 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;
- }
+ if (size <= 1024) {
+ return ngx_malloc(pool, size);
}
- p->d.next = new;
-
- pool->current = current ? current : new;
-
- return m;
+ return ngx_palloc_large(pool, size);
}
@@ -216,7 +190,6 @@
ngx_palloc_large(ngx_pool_t *pool, size_t size)
{
void *p;
- ngx_uint_t n;
ngx_pool_large_t *large;
p = ngx_alloc(size, pool->log);
@@ -224,20 +197,7 @@
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));
+ large = ngx_malloc(pool, sizeof(ngx_pool_large_t));
if (large == NULL) {
ngx_free(p);
return NULL;
@@ -262,7 +222,7 @@
return NULL;
}
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
+ large = ngx_malloc(pool, sizeof(ngx_pool_large_t));
if (large == NULL) {
ngx_free(p);
return NULL;
@@ -279,17 +239,41 @@
ngx_int_t
ngx_pfree(ngx_pool_t *pool, void *p)
{
- ngx_pool_large_t *l;
+ ngx_pool_large_t *l;
+ ngx_pool_large_t *ll;
+ ngx_pool_data_t *d, *n;
- for (l = pool->large; l; l = l->next) {
+ for (l = pool->large, ll = l; l; ll = 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;
+ if (l == pool->large) {
+ pool->large = NULL;
+ }
+
+ ll->next = l->next;
+ p = l;
+ break;
+ }
+ }
+ for (d = pool->d, n = d->next; ; d = n, n = d->next) {
+ if (p == d->alloc) {
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", d->alloc);
+ if (d->alloc) {
+ ngx_free(d->alloc);
+ }
+ d->alloc = NULL;
+ d->prev->next = d->next;
+ d->next->prev = d->prev;
+ ngx_free(d);
return NGX_OK;
}
+ if (d->next == pool->d) {
+ break;
+ }
}
return NGX_DECLINED;
diff -ur nginx-1.0.6/src/core/ngx_palloc.h nginx-1.0.6-patched/src/core/ngx_palloc.h
--- nginx-1.0.6/src/core/ngx_palloc.h 2009-12-17 20:25:46.000000000 +0800
+++ nginx-1.0.6-patched/src/core/ngx_palloc.h 2011-09-13 12:11:03.155622101 +0800
@@ -38,6 +38,7 @@
typedef struct ngx_pool_large_s ngx_pool_large_t;
+typedef struct ngx_pool_data_s ngx_pool_data_t;
struct ngx_pool_large_s {
ngx_pool_large_t *next;
@@ -45,16 +46,15 @@
};
-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;
+ ngx_pool_data_t *prev;
+ 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;

View File

@ -0,0 +1,27 @@
# HG changeset patch
# User Maxim Dounin <mdounin@mdounin.ru>
# Date 1309799136 -14400
# Node ID 99e276bba8596bc4df9e638482ee413f4c6bf700
# Parent e7b2f945d55ae44a2295facf9e3336dc4633e5b5
Core: fix body with request_body_in_single_buf.
If there were preread data and request body was big enough first part
of request body was duplicated.
See report here:
http://nginx.org/pipermail/nginx/2011-July/027756.html
diff --git a/src/http/ngx_http_request_body.c b/src/http/ngx_http_request_body.c
--- a/src/http/ngx_http_request_body.c
+++ b/src/http/ngx_http_request_body.c
@@ -372,7 +372,9 @@ ngx_http_do_read_client_request_body(ngx
}
}
- if (r->request_body_in_file_only && rb->bufs->next) {
+ if (rb->bufs->next
+ && (r->request_body_in_file_only || r->request_body_in_single_buf))
+ {
rb->bufs = rb->bufs->next;
}

View File

@ -0,0 +1,17 @@
# HG changeset patch
# User Maxim Dounin <mdounin@mdounin.ru>
# Date 1309776931 -14400
# Node ID e7b2f945d55ae44a2295facf9e3336dc4633e5b5
# Parent 610e909bb9e29766188aa86fae3abe0bd3432940
Core: fix body if it's preread and there are extra data.
--- nginx-1.0.6/src/http/ngx_http_request_body.c 2011-07-05 12:11:21.619264633 +0800
+++ nginx-1.0.6-patched/src/http/ngx_http_request_body.c 2011-07-05 12:14:30.694321554 +0800
@@ -141,6 +141,7 @@
/* the whole request body was pre-read */
+ b->last = b->pos + r->headers_in.content_length_n;
r->header_in->pos += (size_t) r->headers_in.content_length_n;
r->request_length += r->headers_in.content_length_n;

View File

@ -0,0 +1,26 @@
diff -ur lz-nginx-1.0.6/nginx-1.0.6/src/core/nginx.h lz-nginx-1.0.6-patched/nginx-1.0.6/src/core/nginx.h
--- lz-nginx-1.0.6/nginx-1.0.6/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
+++ lz-nginx-1.0.6-patched/nginx-1.0.6/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1000006
#define NGINX_VERSION "1.0.6"
-#define NGINX_VER "nginx/" NGINX_VERSION
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
#define NGINX_VAR "NGINX"
#define NGX_OLDPID_EXT ".oldbin"
Only in lz-nginx-1.0.6-patched/nginx-1.0.6/src/core: nginx.h.orig
Only in lz-nginx-1.0.6-patched/nginx-1.0.6/src/core: nginx.h.rej
diff -ur lz-nginx-1.0.6/nginx-1.0.6/src/http/ngx_http_header_filter_module.c lz-nginx-1.0.6-patched/nginx-1.0.6/src/http/ngx_http_header_filter_module.c
--- lz-nginx-1.0.6/nginx-1.0.6/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
+++ lz-nginx-1.0.6-patched/nginx-1.0.6/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: ngx_openresty" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;

View File

@ -0,0 +1,40 @@
# HG changeset patch
# User Maxim Dounin <mdounin@mdounin.ru>
# Date 1309187571 -14400
# Node ID 283a416b2235d5383c12a975edc8866f007fb628
# Parent f5fc40783ddcbf4db33859ee2a9bce54cf32c350
Core: protect from subrequest loops.
Without protection subrequest loop results in r->count overflow and
SIGSEGV. Protection was broken in 0.7.25.
Note that this also limits number of parallel subrequests. This
wasn't exactly the case before 0.7.25 as local subrequests were
completed directly.
See here for details:
http://nginx.org/pipermail/nginx-ru/2010-February/032184.html
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -2287,7 +2287,6 @@ ngx_http_subrequest(ngx_http_request_t *
sr->start_sec = tp->sec;
sr->start_msec = tp->msec;
- r->main->subrequests++;
r->main->count++;
*psr = sr;
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -1981,6 +1981,7 @@ ngx_http_finalize_request(ngx_http_reque
if (r == c->data) {
r->main->count--;
+ r->main->subrequests++;
if (!r->logged) {

View File

@ -0,0 +1,90 @@
--- nginx-1.1.2/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
+++ nginx-1.1.2-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;

68
specs/ngx_openresty.spec Normal file
View File

@ -0,0 +1,68 @@
%define resty_prefix /opt/
%define resty_user nobody
%define resty_group nobody
%define dir_name openresty
Name: ngx_openresty
Version: 1.0.5.1
Release: 5
Summary: nginx for openresty
Group: Productivity/Networking/Web/Servers
License: BSD
URL: http://www.openresty.org/
Source0: ngx_openresty-%{version}rc%{release}.tar.gz
BuildRoot: %{build_root}
AutoReqProv: no
BuildRequires: gcc >= 3.0, openssl-devel, pcre-devel, readline-devel
Requires: openssl, pcre, readline
%description
OpenResty (aka. ngx_openresty) is a full-fledged web application server by bundling the standard Nginx core, lots of 3rd-party Nginx modules, as well as most of their external dependencie
%prep
#%setup -q -n ngx_openresty-%{version}
%setup -q -n ngx_openresty-%{version}rc%{release}
%build
#--with-pg_config=opt/pg90/bin/pg_config \
#--with-luajit \
./configure --prefix=%{resty_prefix}/%{dir_name} \
--with-http_postgres_module
make %{?_smp_mflags}
%install
make install DESTDIR=$RPM_BUILD_ROOT
cur_dir=`pwd`
cd $RPM_BUILD_ROOT%{resty_prefix}/%{dir_name}/nginx/ && \
mkdir client_body_temp fastcgi_temp proxy_temp
cd $RPM_BUILD_ROOT && (find . -type f | sed -e 's|^./|/|g' > $cur_dir/%{name}.manifest)
cd $RPM_BUILD_ROOT && (find . -type l | sed -e 's|^./|/|g' >> $cur_dir/%{name}.manifest)
echo %{resty_prefix}/%{dir_name}/nginx/logs >> $cur_dir/%{name}.manifest
echo %{resty_prefix}/%{dir_name}/nginx/client_body_temp >> $cur_dir/%{name}.manifest
echo %{resty_prefix}/%{dir_name}/nginx/fastcgi_temp >> $cur_dir/%{name}.manifest
echo %{resty_prefix}/%{dir_name}/nginx/proxy_temp >> $cur_dir/%{name}.manifest
#echo %{resty_prefix}/%{dir_name}/nginx/proxy_temp >> $cur_dir/%{name}.manifest
%clean
rm -rf $RPM_BUILD_ROOT
%files -f %{name}.manifest
%defattr(-,%{resty_user},%{resty_group},-)
#%doc
%changelog
* Wed Aug 24 2011 liseen <liseen.wan@gmail.com>
- initial packaging

View File

@ -13,6 +13,9 @@ sub shell (@);
sub cd ($); sub cd ($);
our $BuildRoot; our $BuildRoot;
our @SavedTests;
our $RootDir = `pwd`;
chomp $RootDir;
sub run_tests { sub run_tests {
my $ver = `bash util/ver`; my $ver = `bash util/ver`;
@ -29,6 +32,7 @@ sub run_tests {
sub run_test ($) { sub run_test ($) {
my $block = shift; my $block = shift;
my $name = $block->name; my $name = $block->name;
my $cmd = $block->cmd or my $cmd = $block->cmd or
die "No --- cmd defined for $name\n"; die "No --- cmd defined for $name\n";
@ -54,24 +58,125 @@ sub run_test ($) {
if (!defined $expected_out) { if (!defined $expected_out) {
$expected_out = ''; $expected_out = '';
} else { } else {
$expected_out =~ s/\$OPENRESTY_BUILD_DIR\b/$BuildRoot/gs; #$expected_out =~ s/\$OPENRESTY_BUILD_DIR\b/$BuildRoot/gs;
} }
#die $BuildRoot;
$stdout =~ s/\Q$BuildRoot\E/\$OPENRESTY_BUILD_DIR/g;
is($stdout, $expected_out, "$name - stdout ok"); is($stdout, $expected_out, "$name - stdout ok");
is($stderr, $expected_err, "$name - stderr ok"); is($stderr, $expected_err, "$name - stderr ok");
is($retval >> 8, $expected_exit, "$name - exit code ok"); is($retval >> 8, $expected_exit, "$name - exit code ok");
my $makefile;
if (defined $block->makefile) { if (defined $block->makefile) {
open my $in, "Makefile" or open my $in, "Makefile" or
die "cannot open Makefile for reading: $!"; die "cannot open Makefile for reading: $!";
my $got = do { local $/; <$in> }; $makefile = do { local $/; <$in> };
close $in; close $in;
my $expected_makefile = $block->makefile; my $expected_makefile = $block->makefile;
$expected_makefile =~ s/\$OPENRESTY_BUILD_DIR\b/$BuildRoot/gs; #$expected_makefile =~ s/\$OPENRESTY_BUILD_DIR\b/$BuildRoot/gs;
is($got, $expected_makefile, "$name - Makefile ok"); $makefile =~ s/\Q$BuildRoot\E/\$OPENRESTY_BUILD_DIR/g;
is($makefile, $expected_makefile, "$name - Makefile ok");
} }
push @SavedTests, {
cmd => $cmd,
name => $name,
exit => $retval >> 8,
err => $stderr,
out => $stdout,
makefile => $makefile,
};
}
END {
if ($0 =~ /_$/) {
return;
}
chdir "$RootDir";
#warn `pwd`;
my $outfile = $0 . '_';
if (-f $outfile) {
unlink $outfile;
}
open my $in, $0 or
die "cannot open $0 for reading: $!\n";
while (<$in>) {
if (/^--- (?:ONLY|LAST)$/) {
return;
}
}
close $in;
open my $out, ">$outfile" or
die "cannot open $outfile for writing: $!\n";
open $in, $0 or
die "cannot open $0 for reading: $!\n";
while (<$in>) {
print $out $_;
if (/^__DATA__$/) {
last;
}
}
close $in;
print $out "\n";
my $n = @SavedTests;
my $i = 0;
for my $block (@SavedTests) {
my $name = $block->{name};
my $cmd = $block->{cmd};
my $stdout = $block->{out};
my $makefile = $block->{makefile};
my $exit = $block->{exit};
my $err = $block->{err};
#$stdout =~ s/$BuildRoot/\$OPENRESTY_BUILD_DIR/g;
print $out <<"_EOC_";
=== $name
--- cmd: $cmd
--- out
$stdout
_EOC_
if ($makefile) {
#$makefile =~ s/$BuildRoot\b/\$OPENRESTY_BUILD_DIR/g;
print $out "--- makefile\n$makefile";
}
if ($err) {
print $out "--- err\n$err";
}
if ($exit) {
print $out "--- exit: $exit\n";
}
if ($i++ < $n - 1) {
print $out "\n\n\n";
}
}
print $out "\n";
close $out;
warn "wrote $outfile\n";
} }
sub shell (@) { sub shell (@) {

File diff suppressed because it is too large Load Diff

178
util/configure vendored
View File

@ -72,6 +72,7 @@ my @modules = (
[http_upstream_keepalive => 'upstream-keepalive-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_json => 'rds-json-nginx-module'],
[http_rds_csv => 'rds-csv-nginx-module'],
); );
my $without_resty_mods_regex; my $without_resty_mods_regex;
@ -137,6 +138,15 @@ for my $opt (@ARGV) {
} elsif ($opt eq '--without-lua51') { } elsif ($opt eq '--without-lua51') {
$resty_opts{no_lua} = 1; $resty_opts{no_lua} = 1;
} elsif ($opt eq '--without-lua_cjson') {
$resty_opts{no_lua_cjson} = 1;
} elsif ($opt eq '--without-lua_redis_parser') {
$resty_opts{no_lua_redis_parser} = 1;
} elsif ($opt eq '--without-lua_rds_parser') {
$resty_opts{no_lua_rds_parser} = 1;
} elsif ($opt eq '--with-debug') { } elsif ($opt eq '--with-debug') {
$resty_opts{debug} = 1; $resty_opts{debug} = 1;
@ -510,6 +520,170 @@ _END_
. "\$(MAKE) install$extra_opts INSTALL_TOP=\$(DESTDIR)$lua_prefix"; . "\$(MAKE) install$extra_opts INSTALL_TOP=\$(DESTDIR)$lua_prefix";
cd '..'; cd '..';
}
if ($opts->{lua} || $opts->{luajit}) {
# build lua modules
my $lualib_prefix = "$prefix/lualib";
my $ngx_lua_dir = auto_complete 'ngx_lua';
open my $in, ">>$ngx_lua_dir/config" or
die "Cannot open $ngx_lua_dir/config for appending: $!\n";
print $in <<"_EOC_";
ngx_lua_dquote='"'
CFLAGS="\$CFLAGS -DLUA_DEFAULT_PATH='\$ngx_lua_dquote$lualib_prefix/?.lua\$ngx_lua_dquote'"
CFLAGS="\$CFLAGS -DLUA_DEFAULT_CPATH='\$ngx_lua_dquote$lualib_prefix/?.so\$ngx_lua_dquote'"
_EOC_
close $in;
unless ($opts->{no_lua_cjson}) {
my $dir = auto_complete 'lua-cjson';
if (!defined $dir) {
die "No lua-cjson found";
}
my $lua_inc;
if ($opts->{luajit}) {
$lua_inc = $ENV{LUAJIT_INC};
} else {
$lua_inc = $ENV{LUA_INC};
}
my $extra_opts = " DESTDIR=\$(DESTDIR) LUA_INCLUDE_DIR=$lua_inc " .
"LUA_LIB_DIR=$lualib_prefix";
if ($on_solaris) {
$extra_opts .= " INSTALL=$root_dir/build/install";
if ($opts->{debug}) {
$extra_opts .= " CFLAGS=\"-g -O0 -Wall -pedantic -D'isinf(x)=0'\"";
} else {
$extra_opts .= " CFLAGS=\"-g -O3 -Wall -pedantic -D'isinf(x)=0'\"";
}
} else {
if ($opts->{debug}) {
$extra_opts .= " CFLAGS=\"-g -O0 -Wall -pedantic\"";
}
}
if ($platform eq 'macosx') {
$extra_opts .= " LDFLAGS='-bundle -undefined dynamic_lookup'";
}
if (defined $cc) {
$extra_opts .= " CC=$cc";
} else {
$extra_opts .= " CC=gcc";
}
push @make_cmds, "cd $root_dir/build/$dir && ".
"\$(MAKE)$extra_opts";
push @make_install_cmds, "cd $root_dir/build/$dir && " .
"\$(MAKE) install$extra_opts";
}
unless ($opts->{no_lua_redis_parser}) {
my $dir = auto_complete 'lua-redis-parser';
if (!defined $dir) {
die "No lua-redis-parser found";
}
my $lua_inc;
if ($opts->{luajit}) {
$lua_inc = $ENV{LUAJIT_INC};
} else {
$lua_inc = $ENV{LUA_INC};
}
my $extra_opts = " DESTDIR=\$(DESTDIR) LUA_INCLUDE_DIR=$lua_inc " .
"LUA_LIB_DIR=$lualib_prefix";
if ($on_solaris) {
$extra_opts .= " INSTALL=$root_dir/build/install";
if ($opts->{debug}) {
$extra_opts .= " CFLAGS=\"-g -O0 -Wall\"";
}
} else {
if ($opts->{debug}) {
$extra_opts .= " CFLAGS=\"-g -O0 -Wall\"";
}
}
if ($platform eq 'macosx') {
$extra_opts .= " LDFLAGS='-bundle -undefined dynamic_lookup'";
}
if (defined $cc) {
$extra_opts .= " CC=$cc";
} else {
$extra_opts .= " CC=gcc";
}
push @make_cmds, "cd $root_dir/build/$dir && ".
"\$(MAKE)$extra_opts";
push @make_install_cmds, "cd $root_dir/build/$dir && " .
"\$(MAKE) install$extra_opts";
}
unless ($opts->{no_lua_rds_parser}) {
my $dir = auto_complete 'lua-rds-parser';
if (!defined $dir) {
die "No lua-rds-parser found";
}
my $lua_inc;
if ($opts->{luajit}) {
$lua_inc = $ENV{LUAJIT_INC};
} else {
$lua_inc = $ENV{LUA_INC};
}
my $extra_opts = " DESTDIR=\$(DESTDIR) LUA_INCLUDE_DIR=$lua_inc " .
"LUA_LIB_DIR=$lualib_prefix";
if ($on_solaris) {
$extra_opts .= " INSTALL=$root_dir/build/install";
if ($opts->{debug}) {
$extra_opts .= " CFLAGS=\"-g -O0 -Wall\"";
}
} else {
if ($opts->{debug}) {
$extra_opts .= " CFLAGS=\"-g -O0 -Wall\"";
}
}
if ($platform eq 'macosx') {
$extra_opts .= " LDFLAGS='-bundle -undefined dynamic_lookup'";
}
if (defined $cc) {
$extra_opts .= " CC=$cc";
} else {
$extra_opts .= " CC=gcc";
}
push @make_cmds, "cd $root_dir/build/$dir && ".
"\$(MAKE)$extra_opts";
push @make_install_cmds, "cd $root_dir/build/$dir && " .
"\$(MAKE) install$extra_opts";
}
} }
# prepare nginx configure line # prepare nginx configure line
@ -602,6 +776,10 @@ _EOC_
$msg .= <<'_EOC_'; $msg .= <<'_EOC_';
--without-lua_cjson disable the lua-cjson library
--without-lua_redis_parser disable the lua-redis-parser library
--without-lua_rds_parser disable the lua-rds-parser library
--without-lua51 disable the bundled Lua 5.1 interpreter --without-lua51 disable the bundled Lua 5.1 interpreter
--with-luajit enable LuaJIT 2.0 --with-luajit enable LuaJIT 2.0
--with-libdrizzle=DIR specify the libdrizzle 1.0 (or drizzle) installation prefix --with-libdrizzle=DIR specify the libdrizzle 1.0 (or drizzle) installation prefix

View File

@ -51,7 +51,7 @@ for my $t_file (@t_files) {
warn "\n- $orig"; warn "\n- $orig";
warn "+ $_"; warn "+ $_";
} elsif (s{\bbuild/$pat[^/ \t\n]*\d[^/ \t\n]*}{build/$dir}g && $orig ne $_) { } elsif (s{OPENRESTY_BUILD_DIR/$pat[^/ \t\n\w]*\d[^/ \t\n]*}{OPENRESTY_BUILD_DIR/$dir}g && $orig ne $_) {
$changed++; $changed++;
warn "\n- $orig"; warn "\n- $orig";

View File

@ -6,16 +6,15 @@ use warnings;
use Getopt::Std qw(getopts); use Getopt::Std qw(getopts);
my %opts; my %opts;
getopts("m:", \%opts) or usage(); getopts("dm:", \%opts) or usage();
my $mode = $opts{m}; my $mode = $opts{m};
if (!defined $mode) { if ($opts{d}) {
die "No -m option specified.\n"; shell("mkdir -p @ARGV");
exit;
} }
my $mod = $opts{m};
if (@ARGV < 2) { if (@ARGV < 2) {
usage(); usage();
} }
@ -46,8 +45,10 @@ if (!-d $target_dir) {
shell("cp @src $dst"); shell("cp @src $dst");
if (-f $dst) { if (-f $dst) {
chmod oct($mode), $dst or if (defined $mode) {
die "failed to change mode of $dst to $mode.\n"; chmod oct($mode), $dst or
die "failed to change mode of $dst to $mode.\n";
}
exit; exit;
} }
@ -62,13 +63,15 @@ for my $src (@src) {
$name = $src; $name = $src;
} }
my $target = "$target_dir/$name"; if (defined $mode) {
chmod oct($mode), $target or my $target = "$target_dir/$name";
die "failed to change mode of $target to $mode.\n"; chmod oct($mode), $target or
die "failed to change mode of $target to $mode.\n";
}
} }
sub usage { sub usage {
die "Usage: install -m <attrs> <src>... <dst>\n"; die "Usage: install [-d] [-m <attrs>] <src>... <dst>\n";
} }
sub shell { sub shell {

View File

@ -44,6 +44,8 @@ patch -p1 < $root/patches/nginx-$main_ver-request_body_in_single_buf.patch || ex
patch -p1 -l < $root/patches/nginx-$main_ver-subrequest_loop.patch || exit 1 patch -p1 -l < $root/patches/nginx-$main_ver-subrequest_loop.patch || exit 1
patch -p1 -l < $root/patches/nginx-$main_ver-gzip_empty_flush_buf.patch || exit 1
rm -f *.patch || exit 1 rm -f *.patch || exit 1
cd .. || exit 1 cd .. || exit 1
@ -53,7 +55,7 @@ sed -i $"s/NGINX_VERSION \".unknown/NGINX_VERSION \".$minor_ver/" \
./nginx-no_pool.patch || exit 1 ./nginx-no_pool.patch || exit 1
rm -rf no-pool-nginx-$ver rm -rf no-pool-nginx-$ver
ver=0.37rc1 ver=0.37rc4
$root/util/get-tarball "http://github.com/agentzh/echo-nginx-module/tarball/v$ver" -O echo-nginx-module-$ver.tar.gz || exit 1 $root/util/get-tarball "http://github.com/agentzh/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 tar -xzf echo-nginx-module-$ver.tar.gz || exit 1
mv agentzh-echo-nginx-module-* echo-nginx-module-$ver || exit 1 mv agentzh-echo-nginx-module-* echo-nginx-module-$ver || exit 1
@ -73,26 +75,31 @@ $root/util/get-tarball "http://github.com/agentzh/set-misc-nginx-module/tarball/
tar -xzf 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 agentzh-set-misc-nginx-module-* set-misc-nginx-module-$ver || exit 1
ver=0.12rc1 ver=0.12rc3
$root/util/get-tarball "http://github.com/agentzh/rds-json-nginx-module/tarball/v$ver" -O rds-json-nginx-module-$ver.tar.gz || exit 1 $root/util/get-tarball "http://github.com/agentzh/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 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 agentzh-rds-json-nginx-module-* rds-json-nginx-module-$ver || exit 1
ver=0.15 ver=0.02
$root/util/get-tarball "http://github.com/agentzh/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
ver=0.16rc2
$root/util/get-tarball "http://github.com/agentzh/headers-more-nginx-module/tarball/v$ver" -O headers-more-nginx-module-$ver.tar.gz || exit 1 $root/util/get-tarball "http://github.com/agentzh/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 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 agentzh-headers-more-nginx-module-* headers-more-nginx-module-$ver || exit 1
################################# #################################
ver=0.1.1rc3 ver=0.1.1rc4
$root/util/get-tarball "http://github.com/chaoslawful/drizzle-nginx-module/tarball/v$ver" -O drizzle-nginx-module-$ver.tar.gz || exit 1 $root/util/get-tarball "http://github.com/chaoslawful/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 tar -xzf drizzle-nginx-module-$ver.tar.gz || exit 1
mv chaoslawful-drizzle-nginx-module-* drizzle-nginx-module-$ver || exit 1 mv chaoslawful-drizzle-nginx-module-* drizzle-nginx-module-$ver || exit 1
################################# #################################
ver=0.2.1rc4 ver=0.3.1rc3
$root/util/get-tarball "http://github.com/chaoslawful/lua-nginx-module/tarball/v$ver" -O lua-nginx-module-$ver.tar.gz || exit 1 $root/util/get-tarball "http://github.com/chaoslawful/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 tar -xzf lua-nginx-module-$ver.tar.gz || exit 1
mv chaoslawful-lua-nginx-module-* ngx_lua-$ver || exit 1 mv chaoslawful-lua-nginx-module-* ngx_lua-$ver || exit 1
@ -203,6 +210,29 @@ cd ..
################################# #################################
ver=1.0.2
$root/util/get-tarball "http://www.kyne.com.au/~mark/software/lua-cjson-$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
cd ..
#################################
ver=0.09rc5
$root/util/get-tarball "http://github.com/agentzh/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
#################################
ver=0.03
$root/util/get-tarball "http://github.com/agentzh/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
#################################
rm *.tar.gz rm *.tar.gz
cd .. cd ..

49
util/upgrade-patches.pl Normal file
View File

@ -0,0 +1,49 @@
#!/usr/bin/env perl
use strict;
use warnings;
my $ver = shift or usage();
my $newver = shift or usage();
my @files = `find patches -name '*.patch'`;
for my $file (@files) {
chomp $file;
next unless $file =~ m{^patches/nginx-(?:$ver|$newver)-};
(my $newfile = $file) =~ s/nginx-$ver-/nginx-$newver-/g;
if ($newfile ne $file && !-f $newfile) {
my $cmd = "cp $file $newfile";
system($cmd) == 0
or die "failed run command $cmd.\n";
$cmd = "git add $newfile";
system($cmd) == 0
or die "failed run command $cmd.\n";
}
my $cmd = "sed -i 's/1\.0\.5/1.0.6/g' $newfile";
system($cmd) == 0
or die "failed to run command $cmd.\n";
my $oldver_int = version_to_int($ver);
my $newver_int = version_to_int($newver);
warn "$oldver_int => $newver_int\n";
$cmd = "sed -i 's/$oldver_int/$newver_int/g' $newfile";
system($cmd) == 0
or die "failed to run command $cmd.\n";
print "$file => $newfile\n";
}
sub usage {
die "Usage: $0 <old-version> <new-version>\n";
}
sub version_to_int {
my $ver = shift;
$ver =~ s/\.(\d+)/sprintf("%03d", $1)/eg;
$ver
}

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
main_ver=1.0.4 main_ver=1.0.6
minor_ver=2 minor_ver=5
version=$main_ver.$minor_ver version=$main_ver.$minor_ver
echo $version echo $version