mirror of
				https://github.com/openresty/openresty.git
				synced 2024-10-13 00:29:41 +00:00 
			
		
		
		
	upgraded the NGINX core to 1.9.11 and ngx_lua to 0.10.1rc0.
This commit is contained in:
		
							
								
								
									
										11
									
								
								patches/nginx-1.9.11-always_enable_cc_feature_tests.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								patches/nginx-1.9.11-always_enable_cc_feature_tests.patch
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					--- nginx-1.9.11/auto/cc/conf	2015-10-30 22:47:50.000000000 +0800
 | 
				
			||||||
 | 
					+++ nginx-1.9.11-patched/auto/cc/conf	2015-11-02 12:23:05.385156987 +0800
 | 
				
			||||||
 | 
					@@ -136,7 +136,7 @@ fi
 | 
				
			||||||
 | 
					 CFLAGS="$CFLAGS $NGX_CC_OPT"
 | 
				
			||||||
 | 
					 NGX_TEST_LD_OPT="$NGX_LD_OPT"
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-if [ "$NGX_PLATFORM" != win32 ]; then
 | 
				
			||||||
 | 
					+if [ 1 ]; then
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					     if test -n "$NGX_LD_OPT"; then
 | 
				
			||||||
 | 
					         ngx_feature=--with-ld-opt=\"$NGX_LD_OPT\"
 | 
				
			||||||
							
								
								
									
										19
									
								
								patches/nginx-1.9.11-cache_manager_exit.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								patches/nginx-1.9.11-cache_manager_exit.patch
									
									
									
									
									
										Normal 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) {
 | 
				
			||||||
							
								
								
									
										1160
									
								
								patches/nginx-1.9.11-dtrace.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1160
									
								
								patches/nginx-1.9.11-dtrace.patch
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										11
									
								
								patches/nginx-1.9.11-gcc-maybe-uninitialized-warning.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								patches/nginx-1.9.11-gcc-maybe-uninitialized-warning.patch
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					--- nginx-1.9.11/src/http/ngx_http_request.c	2013-05-06 03:26:50.000000000 -0700
 | 
				
			||||||
 | 
					+++ nginx-1.9.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;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
							
								
								
									
										20
									
								
								patches/nginx-1.9.11-hash_overflow.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								patches/nginx-1.9.11-hash_overflow.patch
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					# HG changeset patch
 | 
				
			||||||
 | 
					# User Yichun Zhang <agentzh@gmail.com>
 | 
				
			||||||
 | 
					# Date 1412276417 25200
 | 
				
			||||||
 | 
					#      Thu Oct 02 12:00:17 2014 -0700
 | 
				
			||||||
 | 
					# Node ID 4032b992f23b054c1a2cfb0be879330d2c6708e5
 | 
				
			||||||
 | 
					# Parent  1ff0f68d9376e3d184d65814a6372856bf65cfcd
 | 
				
			||||||
 | 
					Hash: buffer overflow might happen when exceeding the pre-configured limits.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff -r 1ff0f68d9376 -r 4032b992f23b src/core/ngx_hash.c
 | 
				
			||||||
 | 
					--- a/src/core/ngx_hash.c	Tue Sep 30 15:50:28 2014 -0700
 | 
				
			||||||
 | 
					+++ b/src/core/ngx_hash.c	Thu Oct 02 12:00:17 2014 -0700
 | 
				
			||||||
 | 
					@@ -312,6 +312,8 @@ ngx_hash_init(ngx_hash_init_t *hinit, ng
 | 
				
			||||||
 | 
					         continue;
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+    size--;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					     ngx_log_error(NGX_LOG_WARN, hinit->pool->log, 0,
 | 
				
			||||||
 | 
					                   "could not build optimal %s, you should increase "
 | 
				
			||||||
 | 
					                   "either %s_max_size: %i or %s_bucket_size: %i; "
 | 
				
			||||||
							
								
								
									
										13
									
								
								patches/nginx-1.9.11-larger_max_error_str.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								patches/nginx-1.9.11-larger_max_error_str.patch
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					--- nginx-1.9.11/src/core/ngx_log.h	2013-10-08 05:07:14.000000000 -0700
 | 
				
			||||||
 | 
					+++ nginx-1.9.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
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 /*********************************/
 | 
				
			||||||
							
								
								
									
										115
									
								
								patches/nginx-1.9.11-log_escape_non_ascii.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								patches/nginx-1.9.11-log_escape_non_ascii.patch
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,115 @@
 | 
				
			|||||||
 | 
					--- nginx-1.9.11/src/http/modules/ngx_http_log_module.c	2011-11-01 21:24:50.000000000 +0800
 | 
				
			||||||
 | 
					+++ nginx-1.9.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;
 | 
				
			||||||
							
								
								
									
										36
									
								
								patches/nginx-1.9.11-no_Werror.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								patches/nginx-1.9.11-no_Werror.patch
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,36 @@
 | 
				
			|||||||
 | 
					diff -urp nginx-1.9.11/auto/cc/clang nginx-1.9.11-patched/auto/cc/clang
 | 
				
			||||||
 | 
					--- nginx-1.9.11/auto/cc/clang	2014-03-04 03:39:24.000000000 -0800
 | 
				
			||||||
 | 
					+++ nginx-1.9.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.9.11/auto/cc/gcc nginx-1.9.11-patched/auto/cc/gcc
 | 
				
			||||||
 | 
					--- nginx-1.9.11/auto/cc/gcc	2014-03-04 03:39:24.000000000 -0800
 | 
				
			||||||
 | 
					+++ nginx-1.9.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.9.11/auto/cc/icc nginx-1.9.11-patched/auto/cc/icc
 | 
				
			||||||
 | 
					--- nginx-1.9.11/auto/cc/icc	2014-03-04 03:39:24.000000000 -0800
 | 
				
			||||||
 | 
					+++ nginx-1.9.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"
 | 
				
			||||||
							
								
								
									
										90
									
								
								patches/nginx-1.9.11-no_error_pages.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								patches/nginx-1.9.11-no_error_pages.patch
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,90 @@
 | 
				
			|||||||
 | 
					--- nginx-1.9.11/src/http/ngx_http_core_module.c	2010-12-14 18:38:42.000000000 +0800
 | 
				
			||||||
 | 
					+++ nginx-1.9.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;
 | 
				
			||||||
							
								
								
									
										585
									
								
								patches/nginx-1.9.11-no_pool.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										585
									
								
								patches/nginx-1.9.11-no_pool.patch
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,585 @@
 | 
				
			|||||||
 | 
					diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.9.11/src/core/nginx.h nginx-1.9.11-patched/src/core/nginx.h
 | 
				
			||||||
 | 
					--- nginx-1.9.11/src/core/nginx.h	2014-07-08 06:22:39.000000000 -0700
 | 
				
			||||||
 | 
					+++ nginx-1.9.11-patched/src/core/nginx.h	2014-07-13 19:21:54.117099631 -0700
 | 
				
			||||||
 | 
					@@ -10,7 +10,7 @@
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 #define nginx_version      1009011
 | 
				
			||||||
 | 
					 #define NGINX_VERSION      "1.9.11"
 | 
				
			||||||
 | 
					-#define NGINX_VER          "openresty/" NGINX_VERSION ".unknown"
 | 
				
			||||||
 | 
					+#define NGINX_VER          "openresty/" NGINX_VERSION ".unknown (no pool)"
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 #ifdef NGX_BUILD
 | 
				
			||||||
 | 
					diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.9.11/src/core/ngx_array.c nginx-1.9.11-patched/src/core/ngx_array.c
 | 
				
			||||||
 | 
					--- nginx-1.9.11/src/core/ngx_array.c	2014-07-08 06:22:39.000000000 -0700
 | 
				
			||||||
 | 
					+++ nginx-1.9.11-patched/src/core/ngx_array.c	2014-07-13 19:21:54.117099631 -0700
 | 
				
			||||||
 | 
					@@ -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++;
 | 
				
			||||||
 | 
					+        /* allocate a new array */
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-        } else {
 | 
				
			||||||
 | 
					-            /* allocate a new array */
 | 
				
			||||||
 | 
					+        new = ngx_palloc(p, 2 * size);
 | 
				
			||||||
 | 
					+        if (new == NULL) {
 | 
				
			||||||
 | 
					+            return NULL;
 | 
				
			||||||
 | 
					+        }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-            new = ngx_palloc(p, 2 * size);
 | 
				
			||||||
 | 
					-            if (new == NULL) {
 | 
				
			||||||
 | 
					-                return NULL;
 | 
				
			||||||
 | 
					-            }
 | 
				
			||||||
 | 
					+        ngx_memcpy(new, a->elts, size);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-            ngx_memcpy(new, a->elts, size);
 | 
				
			||||||
 | 
					-            a->elts = new;
 | 
				
			||||||
 | 
					-            a->nalloc *= 2;
 | 
				
			||||||
 | 
					+        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
 | 
				
			||||||
 | 
					-             */
 | 
				
			||||||
 | 
					+        nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-            p->d.last += size;
 | 
				
			||||||
 | 
					-            a->nalloc += n;
 | 
				
			||||||
 | 
					+        new = ngx_palloc(p, nalloc * a->size);
 | 
				
			||||||
 | 
					+        if (new == NULL) {
 | 
				
			||||||
 | 
					+            return NULL;
 | 
				
			||||||
 | 
					+        }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-        } else {
 | 
				
			||||||
 | 
					-            /* allocate a new array */
 | 
				
			||||||
 | 
					+        ngx_memcpy(new, a->elts, a->nelts * a->size);
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-            nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
 | 
				
			||||||
 | 
					+        link = ngx_palloc(p, sizeof(ngx_array_link_t));
 | 
				
			||||||
 | 
					+        if (link == NULL) {
 | 
				
			||||||
 | 
					+            ngx_pfree(p, new);
 | 
				
			||||||
 | 
					+            return NULL;
 | 
				
			||||||
 | 
					+        }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-            new = ngx_palloc(p, nalloc * a->size);
 | 
				
			||||||
 | 
					-            if (new == NULL) {
 | 
				
			||||||
 | 
					-                return NULL;
 | 
				
			||||||
 | 
					-            }
 | 
				
			||||||
 | 
					+        link->next = a->old_elts;
 | 
				
			||||||
 | 
					+        link->elts = a->elts;
 | 
				
			||||||
 | 
					+        a->old_elts = link;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-            ngx_memcpy(new, a->elts, a->nelts * a->size);
 | 
				
			||||||
 | 
					-            a->elts = new;
 | 
				
			||||||
 | 
					-            a->nalloc = nalloc;
 | 
				
			||||||
 | 
					-        }
 | 
				
			||||||
 | 
					+        a->elts = new;
 | 
				
			||||||
 | 
					+        a->nalloc = nalloc;
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					     elt = (u_char *) a->elts + a->size * a->nelts;
 | 
				
			||||||
 | 
					diff --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.9.11/src/core/ngx_array.h nginx-1.9.11-patched/src/core/ngx_array.h
 | 
				
			||||||
 | 
					--- nginx-1.9.11/src/core/ngx_array.h	2014-07-08 06:22:39.000000000 -0700
 | 
				
			||||||
 | 
					+++ nginx-1.9.11-patched/src/core/ngx_array.h	2014-07-13 19:21:54.118099637 -0700
 | 
				
			||||||
 | 
					@@ -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 --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.9.11/src/core/ngx_palloc.c nginx-1.9.11-patched/src/core/ngx_palloc.c
 | 
				
			||||||
 | 
					--- nginx-1.9.11/src/core/ngx_palloc.c	2014-07-08 06:22:39.000000000 -0700
 | 
				
			||||||
 | 
					+++ nginx-1.9.11-patched/src/core/ngx_palloc.c	2014-07-13 20:04:41.786419098 -0700
 | 
				
			||||||
 | 
					@@ -9,32 +9,26 @@
 | 
				
			||||||
 | 
					 #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);
 | 
				
			||||||
 | 
					+static void * ngx_malloc(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 +38,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 +49,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 +61,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,170 +72,82 @@ 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;
 | 
				
			||||||
 | 
					+    ngx_free(pool);
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 void
 | 
				
			||||||
 | 
					 ngx_reset_pool(ngx_pool_t *pool)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					-    ngx_pool_t        *p;
 | 
				
			||||||
 | 
					-    ngx_pool_large_t  *l;
 | 
				
			||||||
 | 
					+    ngx_pool_data_t     *d, *n;
 | 
				
			||||||
 | 
					+    ngx_pool_data_t     *saved = NULL;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-    for (l = pool->large; l; l = l->next) {
 | 
				
			||||||
 | 
					-        if (l->alloc) {
 | 
				
			||||||
 | 
					-            ngx_free(l->alloc);
 | 
				
			||||||
 | 
					+    if (pool->d) {
 | 
				
			||||||
 | 
					+        for (d = pool->d, n = d->next; ; d = n, n = n->next) {
 | 
				
			||||||
 | 
					+            if (d->alloc == pool->log) {
 | 
				
			||||||
 | 
					+                saved = d;
 | 
				
			||||||
 | 
					+                continue;
 | 
				
			||||||
 | 
					+            }
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+            ngx_free(d->alloc);
 | 
				
			||||||
 | 
					+            ngx_free(d);
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+            if (n == NULL) {
 | 
				
			||||||
 | 
					+                break;
 | 
				
			||||||
 | 
					+            }
 | 
				
			||||||
 | 
					         }
 | 
				
			||||||
 | 
					-    }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-    for (p = pool; p; p = p->d.next) {
 | 
				
			||||||
 | 
					-        p->d.last = (u_char *) p + sizeof(ngx_pool_t);
 | 
				
			||||||
 | 
					-        p->d.failed = 0;
 | 
				
			||||||
 | 
					+        pool->d = saved;
 | 
				
			||||||
 | 
					+        pool->current = pool;
 | 
				
			||||||
 | 
					+        pool->chain = NULL;
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-    pool->current = pool;
 | 
				
			||||||
 | 
					-    pool->chain = NULL;
 | 
				
			||||||
 | 
					-    pool->large = NULL;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 void *
 | 
				
			||||||
 | 
					 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 = 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);
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-        return ngx_palloc_block(pool, size);
 | 
				
			||||||
 | 
					-    }
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-    return ngx_palloc_large(pool, size);
 | 
				
			||||||
 | 
					+    return ngx_malloc(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;
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-                return m;
 | 
				
			||||||
 | 
					-            }
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-            p = p->d.next;
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-        } while (p);
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-        return ngx_palloc_block(pool, size);
 | 
				
			||||||
 | 
					-    }
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-    return ngx_palloc_large(pool, size);
 | 
				
			||||||
 | 
					-}
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-static void *
 | 
				
			||||||
 | 
					-ngx_palloc_block(ngx_pool_t *pool, size_t size)
 | 
				
			||||||
 | 
					-{
 | 
				
			||||||
 | 
					-    u_char      *m;
 | 
				
			||||||
 | 
					-    size_t       psize;
 | 
				
			||||||
 | 
					-    ngx_pool_t  *p, *new;
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-    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;
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-    for (p = pool->current; p->d.next; p = p->d.next) {
 | 
				
			||||||
 | 
					-        if (p->d.failed++ > 4) {
 | 
				
			||||||
 | 
					-            pool->current = p->d.next;
 | 
				
			||||||
 | 
					-        }
 | 
				
			||||||
 | 
					-    }
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-    p->d.next = new;
 | 
				
			||||||
 | 
					-
 | 
				
			||||||
 | 
					-    return m;
 | 
				
			||||||
 | 
					+    return ngx_malloc(pool, size);
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 static void *
 | 
				
			||||||
 | 
					-ngx_palloc_large(ngx_pool_t *pool, size_t size)
 | 
				
			||||||
 | 
					+ngx_malloc(ngx_pool_t *pool, size_t size)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
 | 
					-    void              *p;
 | 
				
			||||||
 | 
					-    ngx_uint_t         n;
 | 
				
			||||||
 | 
					-    ngx_pool_large_t  *large;
 | 
				
			||||||
 | 
					+    void                *p;
 | 
				
			||||||
 | 
					+    ngx_pool_data_t     *d;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					     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) {
 | 
				
			||||||
 | 
					+    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;
 | 
				
			||||||
 | 
					 }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					@@ -255,38 +156,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 --minimal '--exclude=*.swp' '--exclude=*~' -up nginx-1.9.11/src/core/ngx_palloc.h nginx-1.9.11-patched/src/core/ngx_palloc.h
 | 
				
			||||||
 | 
					--- nginx-1.9.11/src/core/ngx_palloc.h	2014-07-08 06:22:39.000000000 -0700
 | 
				
			||||||
 | 
					+++ nginx-1.9.11-patched/src/core/ngx_palloc.h	2014-07-13 19:21:54.119099642 -0700
 | 
				
			||||||
 | 
					@@ -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;
 | 
				
			||||||
 | 
					 };
 | 
				
			||||||
							
								
								
									
										26
									
								
								patches/nginx-1.9.11-pcre_conf_opt.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								patches/nginx-1.9.11-pcre_conf_opt.patch
									
									
									
									
									
										Normal 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
 | 
				
			||||||
							
								
								
									
										15
									
								
								patches/nginx-1.9.11-proxy_host_port_vars.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								patches/nginx-1.9.11-proxy_host_port_vars.patch
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
				
			|||||||
 | 
					--- nginx-1.9.11/src/http/modules/ngx_http_proxy_module.c	2013-10-08 05:07:14.000000000 -0700
 | 
				
			||||||
 | 
					+++ nginx-1.9.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 },
 | 
				
			||||||
							
								
								
									
										24
									
								
								patches/nginx-1.9.11-server_header.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								patches/nginx-1.9.11-server_header.patch
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					diff -ur nginx-1.9.11/src/core/nginx.h nginx-1.9.11-patched/src/core/nginx.h
 | 
				
			||||||
 | 
					--- nginx-1.9.11/src/core/nginx.h	2010-02-12 17:31:01.000000000 +0800
 | 
				
			||||||
 | 
					+++ nginx-1.9.11-patched/src/core/nginx.h	2010-03-30 10:52:13.240702627 +0800
 | 
				
			||||||
 | 
					@@ -10,7 +10,7 @@
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 #define nginx_version         1009011
 | 
				
			||||||
 | 
					 #define NGINX_VERSION      "1.9.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.9.11/src/http/ngx_http_header_filter_module.c nginx-1.9.11-patched/src/http/ngx_http_header_filter_module.c
 | 
				
			||||||
 | 
					--- nginx-1.9.11/src/http/ngx_http_header_filter_module.c	2010-03-03 23:14:04.000000000 +0800
 | 
				
			||||||
 | 
					+++ nginx-1.9.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;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
							
								
								
									
										44
									
								
								patches/nginx-1.9.11-setting_args_invalidates_uri.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								patches/nginx-1.9.11-setting_args_invalidates_uri.patch
									
									
									
									
									
										Normal 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)
 | 
				
			||||||
 | 
					 {
 | 
				
			||||||
							
								
								
									
										138
									
								
								patches/nginx-1.9.11-slab_defrag.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								patches/nginx-1.9.11-slab_defrag.patch
									
									
									
									
									
										Normal 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;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
							
								
								
									
										42
									
								
								patches/nginx-1.9.11-ssl_cert_cb_yield.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								patches/nginx-1.9.11-ssl_cert_cb_yield.patch
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					# HG changeset patch
 | 
				
			||||||
 | 
					# User Yichun Zhang <agentzh@openresty.org>
 | 
				
			||||||
 | 
					# Date 1451762084 28800
 | 
				
			||||||
 | 
					#      Sat Jan 02 11:14:44 2016 -0800
 | 
				
			||||||
 | 
					# Node ID 449f0461859c16e95bdb18e8be6b94401545d3dd
 | 
				
			||||||
 | 
					# Parent  78b4e10b4367b31367aad3c83c9c3acdd42397c4
 | 
				
			||||||
 | 
					SSL: handled SSL_CTX_set_cert_cb() callback yielding.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OpenSSL 1.0.2+ introduces SSL_CTX_set_cert_cb() to allow custom
 | 
				
			||||||
 | 
					callbacks to serve the SSL certificiates and private keys dynamically
 | 
				
			||||||
 | 
					and lazily. The callbacks may yield for nonblocking I/O or sleeping.
 | 
				
			||||||
 | 
					Here we added support for such usage in NGINX 3rd-party modules
 | 
				
			||||||
 | 
					(like ngx_lua) in NGINX's event handlers for downstream SSL
 | 
				
			||||||
 | 
					connections.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff -r 78b4e10b4367 -r 449f0461859c src/event/ngx_event_openssl.c
 | 
				
			||||||
 | 
					--- a/src/event/ngx_event_openssl.c	Thu Dec 17 16:39:15 2015 +0300
 | 
				
			||||||
 | 
					+++ b/src/event/ngx_event_openssl.c	Sat Jan 02 11:14:44 2016 -0800
 | 
				
			||||||
 | 
					@@ -1210,6 +1210,23 @@
 | 
				
			||||||
 | 
					         return NGX_AGAIN;
 | 
				
			||||||
 | 
					     }
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					+#if OPENSSL_VERSION_NUMBER >= 0x10002000L
 | 
				
			||||||
 | 
					+    if (sslerr == SSL_ERROR_WANT_X509_LOOKUP) {
 | 
				
			||||||
 | 
					+        c->read->handler = ngx_ssl_handshake_handler;
 | 
				
			||||||
 | 
					+        c->write->handler = ngx_ssl_handshake_handler;
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+        if (ngx_handle_read_event(c->read, 0) != NGX_OK) {
 | 
				
			||||||
 | 
					+            return NGX_ERROR;
 | 
				
			||||||
 | 
					+        }
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+        if (ngx_handle_write_event(c->write, 0) != NGX_OK) {
 | 
				
			||||||
 | 
					+            return NGX_ERROR;
 | 
				
			||||||
 | 
					+        }
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					+        return NGX_AGAIN;
 | 
				
			||||||
 | 
					+    }
 | 
				
			||||||
 | 
					+#endif
 | 
				
			||||||
 | 
					+
 | 
				
			||||||
 | 
					     err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_errno : 0;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					     c->ssl->no_wait_shutdown = 1;
 | 
				
			||||||
							
								
								
									
										23
									
								
								patches/nginx-1.9.11-upstream_pipelining.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								patches/nginx-1.9.11-upstream_pipelining.patch
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					commit f9907b72a76a21ac5413187b83177a919475c75f
 | 
				
			||||||
 | 
					Author: Yichun Zhang (agentzh) <agentzh@gmail.com>
 | 
				
			||||||
 | 
					Date:   Wed Feb 10 16:05:08 2016 -0800
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bugfix: upstream: keep sending request data after the first write attempt.
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    See
 | 
				
			||||||
 | 
					    http://mailman.nginx.org/pipermail/nginx-devel/2012-March/002040.html
 | 
				
			||||||
 | 
					    for more details on the issue.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
 | 
				
			||||||
 | 
					index dbaa956..a25aaa2 100644
 | 
				
			||||||
 | 
					--- a/src/http/ngx_http_upstream.c
 | 
				
			||||||
 | 
					+++ b/src/http/ngx_http_upstream.c
 | 
				
			||||||
 | 
					@@ -2003,7 +2003,7 @@ ngx_http_upstream_send_request_handler(ngx_http_request_t *r,
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					 #endif
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					-    if (u->header_sent) {
 | 
				
			||||||
 | 
					+    if (u->request_body_sent) {
 | 
				
			||||||
 | 
					         u->write_event_handler = ngx_http_upstream_dummy_handler;
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					         (void) ngx_handle_write_event(c->write, 0);
 | 
				
			||||||
@ -376,7 +376,7 @@ mv openresty-drizzle-nginx-module-* drizzle-nginx-module-$ver || exit 1
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#################################
 | 
					#################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ver=0.10.0
 | 
					ver=0.10.1rc0
 | 
				
			||||||
$root/util/get-tarball "https://github.com/openresty/lua-nginx-module/tarball/v$ver" -O lua-nginx-module-$ver.tar.gz || exit 1
 | 
					$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
 | 
					tar -xzf lua-nginx-module-$ver.tar.gz || exit 1
 | 
				
			||||||
mv openresty-lua-nginx-module-* ngx_lua-$ver || exit 1
 | 
					mv openresty-lua-nginx-module-* ngx_lua-$ver || exit 1
 | 
				
			||||||
 | 
				
			|||||||
@ -31,4 +31,4 @@ cd ..
 | 
				
			|||||||
tar czvf nginx-$ver.tar.gz nginx-$ver || exit 1
 | 
					tar czvf nginx-$ver.tar.gz nginx-$ver || exit 1
 | 
				
			||||||
ls -lh ./nginx-$ver.tar.gz
 | 
					ls -lh ./nginx-$ver.tar.gz
 | 
				
			||||||
#ls -lh ~/work/nginx-$ver.tar.gz
 | 
					#ls -lh ~/work/nginx-$ver.tar.gz
 | 
				
			||||||
scp nginx-$ver.tar.gz agentzh.org:~/www/agentzh/misc/nginx/
 | 
					scp nginx-$ver.tar.gz openresty.org:/home/agentz/www/agentzh/misc/nginx/
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user