[nginx] Removed unused flag accept_context_updated from ngx_event_t.
details: http://hg.nginx.org/nginx/rev/bcd442b585f0 branches: changeset: 6602:bcd442b585f0 user: Ruslan Ermilov date: Wed Jun 29 14:30:00 2016 +0300 description: Removed unused flag accept_context_updated from ngx_event_t. Also, removed practically unused flag accept_context_updated from ngx_connection_t. diffstat: src/core/ngx_connection.h | 4 src/event/ngx_event.h | 5 - src/event/ngx_event_acceptex.c | 4 ++-- 3 files changed, 2 insertions(+), 11 deletions(-) diffs (43 lines): diff -r d452cb27639f -r bcd442b585f0 src/core/ngx_connection.h --- a/src/core/ngx_connection.h Mon Jun 27 18:42:29 2016 +0300 +++ b/src/core/ngx_connection.h Wed Jun 29 14:30:00 2016 +0300 @@ -186,10 +186,6 @@ struct ngx_connection_s { unsignedneed_last_buf:1; -#if (NGX_HAVE_IOCP) -unsignedaccept_context_updated:1; -#endif - #if (NGX_HAVE_AIO_SENDFILE) unsignedbusy_count:2; #endif diff -r d452cb27639f -r bcd442b585f0 src/event/ngx_event.h --- a/src/event/ngx_event.h Mon Jun 27 18:42:29 2016 +0300 +++ b/src/event/ngx_event.h Wed Jun 29 14:30:00 2016 +0300 @@ -76,11 +76,6 @@ struct ngx_event_s { unsigned cancelable:1; -#if (NGX_WIN32) -/* setsockopt(SO_UPDATE_ACCEPT_CONTEXT) was successful */ -unsigned accept_context_updated:1; -#endif - #if (NGX_HAVE_KQUEUE) unsigned kq_vnode:1; diff -r d452cb27639f -r bcd442b585f0 src/event/ngx_event_acceptex.c --- a/src/event/ngx_event_acceptex.cMon Jun 27 18:42:29 2016 +0300 +++ b/src/event/ngx_event_acceptex.cWed Jun 29 14:30:00 2016 +0300 @@ -41,8 +41,8 @@ ngx_event_acceptex(ngx_event_t *rev) ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno, "setsockopt(SO_UPDATE_ACCEPT_CONTEXT) failed for %V", &c->addr_text); -} else { -c->accept_context_updated = 1; +/* TODO: close socket */ +return; } ngx_getacceptexsockaddrs(c->buffer->pos, ___ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel
Re: [PATCH] Configure: don't test alternatives if preferred feature is found
Hello! On Tue, Jun 28, 2016 at 03:28:31PM -0700, Piotr Sikora wrote: > # HG changeset patch > # User Piotr Sikora > # Date 1467064812 25200 > # Mon Jun 27 15:00:12 2016 -0700 > # Node ID 9e0d65eda7fa016c0aebddf898d6f3f5834351f1 > # Parent d452cb27639f714bc43b7f3ede417e3e7f8efdd6 > Configure: don't test alternatives if preferred feature is found. [...] > @@ -356,28 +373,36 @@ ngx_feature_test="setsockopt(0, IPPROTO_ > > # Linux transparent proxying > > -ngx_feature="IP_TRANSPARENT" > -ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY" > -ngx_feature_run=no > -ngx_feature_incs="#include > - #include " > -ngx_feature_path= > -ngx_feature_libs= > -ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_TRANSPARENT, NULL, 0)" > -. auto/feature > +if [ $ngx_found = no ]; then > + > +ngx_feature="IP_TRANSPARENT" > +ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY" This looks like a mismerge, as previous tests is about IP_BIND_ADDRESS_NO_PORT (it is probably misplaced though). -- Maxim Dounin http://nginx.org/ ___ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel
[nginx] Internal md5 and sha1 implementations are now always used.
details: http://hg.nginx.org/nginx/rev/9eefb38f0005 branches: changeset: 6603:9eefb38f0005 user: Maxim Dounin date: Thu Jun 30 18:57:39 2016 +0300 description: Internal md5 and sha1 implementations are now always used. This reduces the number of moving parts in ABI compatibility checks. Additionally, it also allows to use OpenSSL in FIPS mode while still using md5 for non-security tasks. diffstat: auto/cc/acc |1 - auto/cc/clang |6 -- auto/cc/gcc |6 -- auto/cc/icc |4 - auto/cc/sunc|4 - auto/lib/conf | 29 auto/lib/make |8 --- auto/lib/md5/conf | 103 auto/lib/md5/make | 96 - auto/lib/md5/makefile.bcc | 22 - auto/lib/md5/makefile.msvc | 22 - auto/lib/md5/makefile.owc | 11 auto/lib/sha1/conf | 79 - auto/lib/sha1/make | 96 - auto/lib/sha1/makefile.bcc | 22 - auto/lib/sha1/makefile.msvc | 22 - auto/lib/sha1/makefile.owc | 11 auto/module | 18 ++- auto/modules|6 -- auto/options| 48 ++-- auto/summary| 14 - src/core/ngx_md5.c |6 -- src/core/ngx_md5.h | 32 - src/core/ngx_module.h |9 --- src/core/ngx_sha1.c |6 -- src/core/ngx_sha1.h | 22 - 26 files changed, 39 insertions(+), 664 deletions(-) diffs (truncated from 1003 to 1000 lines): diff --git a/auto/cc/acc b/auto/cc/acc --- a/auto/cc/acc +++ b/auto/cc/acc @@ -12,4 +12,3 @@ CC_TEST_FLAGS="-Ae" PCRE_OPT="$PCRE_OPT -Ae" ZLIB_OPT="$ZLIB_OPT -Ae" -MD5_OPT="$MD5_OPT -Ae" diff --git a/auto/cc/clang b/auto/cc/clang --- a/auto/cc/clang +++ b/auto/cc/clang @@ -66,12 +66,6 @@ else PCRE_OPT="$PCRE_OPT -pipe" fi -if [ ".$MD5_OPT" = "." ]; then -MD5_OPT="-O2 -pipe $CPU_OPT" -else -MD5_OPT="$MD5_OPT -pipe" -fi - if [ ".$ZLIB_OPT" = "." ]; then ZLIB_OPT="-O2 -pipe $CPU_OPT" else diff --git a/auto/cc/gcc b/auto/cc/gcc --- a/auto/cc/gcc +++ b/auto/cc/gcc @@ -128,12 +128,6 @@ else PCRE_OPT="$PCRE_OPT $PIPE" fi -if [ ".$MD5_OPT" = "." ]; then -MD5_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT" -else -MD5_OPT="$MD5_OPT $PIPE" -fi - if [ ".$ZLIB_OPT" = "." ]; then ZLIB_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT" else diff --git a/auto/cc/icc b/auto/cc/icc --- a/auto/cc/icc +++ b/auto/cc/icc @@ -43,10 +43,6 @@ if [ ".$PCRE_OPT" = "." ]; then PCRE_OPT="-O $CPU_OPT" fi -if [ ".$MD5_OPT" = "." ]; then -MD5_OPT="-O $CPU_OPT" -fi - if [ ".$ZLIB_OPT" = "." ]; then ZLIB_OPT="-O $CPU_OPT" fi diff --git a/auto/cc/sunc b/auto/cc/sunc --- a/auto/cc/sunc +++ b/auto/cc/sunc @@ -145,10 +145,6 @@ if [ ".$PCRE_OPT" = "." ]; then PCRE_OPT="$ngx_fast $IPO $CPU_OPT" fi -if [ ".$MD5_OPT" = "." ]; then -MD5_OPT="$ngx_fast $IPO $CPU_OPT" -fi - if [ ".$ZLIB_OPT" = "." ]; then ZLIB_OPT="$ngx_fast $IPO $CPU_OPT" fi diff --git a/auto/lib/conf b/auto/lib/conf --- a/auto/lib/conf +++ b/auto/lib/conf @@ -25,35 +25,6 @@ if [ $USE_OPENSSL = YES ]; then . auto/lib/openssl/conf fi -if [ $USE_MD5 = YES ]; then - -if [ $USE_OPENSSL = YES ]; then -have=NGX_HAVE_OPENSSL_MD5_H . auto/have -have=NGX_OPENSSL_MD5 . auto/have -have=NGX_HAVE_MD5 . auto/have -MD5=YES -MD5_LIB=OpenSSL - -else -. auto/lib/md5/conf -fi - -fi - -if [ $USE_SHA1 = YES ]; then - -if [ $USE_OPENSSL = YES ]; then -have=NGX_HAVE_OPENSSL_SHA1_H . auto/have -have=NGX_HAVE_SHA1 . auto/have -SHA1=YES -SHA1_LIB=OpenSSL - -else -. auto/lib/sha1/conf -fi - -fi - if [ $USE_ZLIB = YES ]; then . auto/lib/zlib/conf fi diff --git a/auto/lib/make b/auto/lib/make --- a/auto/lib/make +++ b/auto/lib/make @@ -7,14 +7,6 @@ if [ $PCRE != NONE -a $PCRE != NO -a $PC . auto/lib/pcre/make fi -if [ $MD5 != NONE -a $MD5 != NO -a $MD5 != YES ]; then -. auto/lib/md5/make -fi - -if [ $SHA1 != NONE -a $SHA1 != NO -a $SHA1 != YES ]; then -. auto/lib/sha1/make -fi - if [ $OPENSSL != NONE -a $OPENSSL != NO -a $OPENSSL != YES ]; then . auto/lib/openssl/make fi diff --git a/auto/lib/md5/conf b/auto/lib/md5/conf deleted file mode 100644 --- a/auto/lib/md5/conf +++ /dev/null @@ -1,103 +0,0 @@ - -# Copyright (C) Igor Sysoev -# Copyright (C) Nginx, Inc. - - -if [ $MD5 != NONE ]; then - -if grep MD5_Init $MD5/md5.h 2>&1 >/dev/null; then -# OpenSSL md5 -OPENSSL_MD5=YES -have=NGX_HAVE_OPENSSL_MD5 . auto/have -have=NGX_OPENSSL_MD5 . auto/have -else -# rsaref md5 -OPENSSL_MD5=NO -fi - -h
Re: [PATCH] Configure: don't test alternatives if preferred feature is found
Hey Maxim, > This looks like a mismerge, as previous tests is about > IP_BIND_ADDRESS_NO_PORT (it is probably misplaced though). Yeah, IP_BIND_ADDRESS_NO_PORT was added in the middle of NGX_HAVE_TRANSPARENT_PROXY checks after I already wrote those changes and I didn't catch the mis-merge. Good catch, thanks! Best regards, Piotr Sikora ___ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel
[PATCH] Configure: don't test alternatives if preferred feature is found
# HG changeset patch # User Piotr Sikora # Date 1467064812 25200 # Mon Jun 27 15:00:12 2016 -0700 # Node ID 4dd0a17ea347f936d81236168bd33288e15fa782 # Parent d452cb27639f714bc43b7f3ede417e3e7f8efdd6 Configure: don't test alternatives if preferred feature is found. Signed-off-by: Piotr Sikora diff -r d452cb27639f -r 4dd0a17ea347 auto/cc/conf --- a/auto/cc/conf +++ b/auto/cc/conf @@ -197,6 +197,7 @@ if [ "$NGX_PLATFORM" != win32 ]; then if [ "$NGX_CC_NAME" = "ccc" ]; then echo "checking for C99 variadic macros ... disabled" +ngx_found=no else ngx_feature="C99 variadic macros" ngx_feature_name="NGX_HAVE_C99_VARIADIC_MACROS" @@ -209,20 +210,24 @@ if [ "$NGX_PLATFORM" != win32 ]; then var(0, buf, \"%d\", 1); if (buf[0] != '1') return 1" . auto/feature - fi +fi -ngx_feature="gcc variadic macros" -ngx_feature_name="NGX_HAVE_GCC_VARIADIC_MACROS" -ngx_feature_run=yes -ngx_feature_incs="#include +if [ $ngx_found = no ]; then + +ngx_feature="gcc variadic macros" +ngx_feature_name="NGX_HAVE_GCC_VARIADIC_MACROS" +ngx_feature_run=yes +ngx_feature_incs="#include #define var(dummy, args...) sprintf(args)" -ngx_feature_path= -ngx_feature_libs= -ngx_feature_test="char buf[30]; buf[0] = '0'; - var(0, buf, \"%d\", 1); - if (buf[0] != '1') return 1" -. auto/feature +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="char buf[30]; buf[0] = '0'; + var(0, buf, \"%d\", 1); + if (buf[0] != '1') return 1" +. auto/feature + +fi ngx_feature="gcc builtin 64 bit byteswap" diff -r d452cb27639f -r 4dd0a17ea347 auto/unix --- a/auto/unix +++ b/auto/unix @@ -184,14 +184,18 @@ ngx_feature_test="fcntl(0, F_READAHEAD, . auto/feature -ngx_feature="posix_fadvise()" -ngx_feature_name="NGX_HAVE_POSIX_FADVISE" -ngx_feature_run=no -ngx_feature_incs="#include " -ngx_feature_path= -ngx_feature_libs= -ngx_feature_test="posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL);" -. auto/feature +if [ $ngx_found = no ]; then + +ngx_feature="posix_fadvise()" +ngx_feature_name="NGX_HAVE_POSIX_FADVISE" +ngx_feature_run=no +ngx_feature_incs="#include " +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL);" +. auto/feature + +fi ngx_feature="O_DIRECT" @@ -208,25 +212,34 @@ if [ $ngx_found = yes -a "$NGX_SYSTEM" = have=NGX_HAVE_ALIGNED_DIRECTIO . auto/have fi -ngx_feature="F_NOCACHE" -ngx_feature_name="NGX_HAVE_F_NOCACHE" -ngx_feature_run=no -ngx_feature_incs="#include " -ngx_feature_path= -ngx_feature_libs= -ngx_feature_test="fcntl(0, F_NOCACHE, 1);" -. auto/feature +if [ $ngx_found = no ]; then -ngx_feature="directio()" -ngx_feature_name="NGX_HAVE_DIRECTIO" -ngx_feature_run=no -ngx_feature_incs="#include - #include " -ngx_feature_path= -ngx_feature_libs= -ngx_feature_test="directio(0, DIRECTIO_ON);" -. auto/feature +ngx_feature="F_NOCACHE" +ngx_feature_name="NGX_HAVE_F_NOCACHE" +ngx_feature_run=no +ngx_feature_incs="#include " +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="fcntl(0, F_NOCACHE, 1);" +. auto/feature + +fi + + +if [ $ngx_found = no ]; then + +ngx_feature="directio()" +ngx_feature_name="NGX_HAVE_DIRECTIO" +ngx_feature_run=no +ngx_feature_incs="#include + #include " +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="directio(0, DIRECTIO_ON);" +. auto/feature + +fi ngx_feature="statfs()" @@ -242,16 +255,20 @@ ngx_feature_test="struct statfs fs; . auto/feature -ngx_feature="statvfs()" -ngx_feature_name="NGX_HAVE_STATVFS" -ngx_feature_run=no -ngx_feature_incs="#include - #include " -ngx_feature_path= -ngx_feature_libs= -ngx_feature_test="struct statvfs fs; - statvfs(\".\", &fs);" -. auto/feature +if [ $ngx_found = no ]; then + +ngx_feature="statvfs()" +ngx_feature_name="NGX_HAVE_STATVFS" +ngx_feature_run=no +ngx_feature_incs="#include + #include " +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="struct statvfs fs; + statvfs(\".\", &fs);" +. auto/feature + +fi ngx_feature="dlopen()" @@ -329,18 +346,6 @@ ngx_feature_test="setsockopt(0, SOL_SOCK . auto/feature -# NetBSD bind to any address for transparent proxying - -ngx_feature="SO_BINDANY" -ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY" -ngx_feature_run=no -ngx_feature_incs="#include " -ngx_feature_path= -ngx_feature_libs= -ngx_feature_test="setsockopt(0, SOL_SOCKET, SO_BINDANY, NULL, 0)" -. auto/feature - - # Linux IP_BIND_ADDRESS_NO_PORT ngx_feature="IP_BIND_ADDRESS_NO_PORT" @@ -354,30 +359,50 @@ ngx_feature_
[PATCH] Configure: don't test alternatives if preferred feature is found
# HG changeset patch # User Piotr Sikora # Date 1467064812 25200 # Mon Jun 27 15:00:12 2016 -0700 # Node ID 33d0b463aa3484428a30d838f6c58d8fe717746b # Parent d452cb27639f714bc43b7f3ede417e3e7f8efdd6 Configure: don't test alternatives if preferred feature is found. Signed-off-by: Piotr Sikora diff -r d452cb27639f -r 33d0b463aa34 auto/cc/conf --- a/auto/cc/conf +++ b/auto/cc/conf @@ -197,6 +197,7 @@ if [ "$NGX_PLATFORM" != win32 ]; then if [ "$NGX_CC_NAME" = "ccc" ]; then echo "checking for C99 variadic macros ... disabled" +ngx_found=no else ngx_feature="C99 variadic macros" ngx_feature_name="NGX_HAVE_C99_VARIADIC_MACROS" @@ -209,20 +210,24 @@ if [ "$NGX_PLATFORM" != win32 ]; then var(0, buf, \"%d\", 1); if (buf[0] != '1') return 1" . auto/feature - fi +fi -ngx_feature="gcc variadic macros" -ngx_feature_name="NGX_HAVE_GCC_VARIADIC_MACROS" -ngx_feature_run=yes -ngx_feature_incs="#include +if [ $ngx_found = no ]; then + +ngx_feature="gcc variadic macros" +ngx_feature_name="NGX_HAVE_GCC_VARIADIC_MACROS" +ngx_feature_run=yes +ngx_feature_incs="#include #define var(dummy, args...) sprintf(args)" -ngx_feature_path= -ngx_feature_libs= -ngx_feature_test="char buf[30]; buf[0] = '0'; - var(0, buf, \"%d\", 1); - if (buf[0] != '1') return 1" -. auto/feature +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="char buf[30]; buf[0] = '0'; + var(0, buf, \"%d\", 1); + if (buf[0] != '1') return 1" +. auto/feature + +fi ngx_feature="gcc builtin 64 bit byteswap" diff -r d452cb27639f -r 33d0b463aa34 auto/unix --- a/auto/unix +++ b/auto/unix @@ -184,14 +184,18 @@ ngx_feature_test="fcntl(0, F_READAHEAD, . auto/feature -ngx_feature="posix_fadvise()" -ngx_feature_name="NGX_HAVE_POSIX_FADVISE" -ngx_feature_run=no -ngx_feature_incs="#include " -ngx_feature_path= -ngx_feature_libs= -ngx_feature_test="posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL);" -. auto/feature +if [ $ngx_found = no ]; then + +ngx_feature="posix_fadvise()" +ngx_feature_name="NGX_HAVE_POSIX_FADVISE" +ngx_feature_run=no +ngx_feature_incs="#include " +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL);" +. auto/feature + +fi ngx_feature="O_DIRECT" @@ -208,25 +212,34 @@ if [ $ngx_found = yes -a "$NGX_SYSTEM" = have=NGX_HAVE_ALIGNED_DIRECTIO . auto/have fi -ngx_feature="F_NOCACHE" -ngx_feature_name="NGX_HAVE_F_NOCACHE" -ngx_feature_run=no -ngx_feature_incs="#include " -ngx_feature_path= -ngx_feature_libs= -ngx_feature_test="fcntl(0, F_NOCACHE, 1);" -. auto/feature +if [ $ngx_found = no ]; then -ngx_feature="directio()" -ngx_feature_name="NGX_HAVE_DIRECTIO" -ngx_feature_run=no -ngx_feature_incs="#include - #include " -ngx_feature_path= -ngx_feature_libs= -ngx_feature_test="directio(0, DIRECTIO_ON);" -. auto/feature +ngx_feature="F_NOCACHE" +ngx_feature_name="NGX_HAVE_F_NOCACHE" +ngx_feature_run=no +ngx_feature_incs="#include " +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="fcntl(0, F_NOCACHE, 1);" +. auto/feature + +fi + + +if [ $ngx_found = no ]; then + +ngx_feature="directio()" +ngx_feature_name="NGX_HAVE_DIRECTIO" +ngx_feature_run=no +ngx_feature_incs="#include + #include " +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="directio(0, DIRECTIO_ON);" +. auto/feature + +fi ngx_feature="statfs()" @@ -242,16 +255,20 @@ ngx_feature_test="struct statfs fs; . auto/feature -ngx_feature="statvfs()" -ngx_feature_name="NGX_HAVE_STATVFS" -ngx_feature_run=no -ngx_feature_incs="#include - #include " -ngx_feature_path= -ngx_feature_libs= -ngx_feature_test="struct statvfs fs; - statvfs(\".\", &fs);" -. auto/feature +if [ $ngx_found = no ]; then + +ngx_feature="statvfs()" +ngx_feature_name="NGX_HAVE_STATVFS" +ngx_feature_run=no +ngx_feature_incs="#include + #include " +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="struct statvfs fs; + statvfs(\".\", &fs);" +. auto/feature + +fi ngx_feature="dlopen()" @@ -341,6 +358,40 @@ ngx_feature_test="setsockopt(0, SOL_SOCK . auto/feature +# Linux transparent proxying + +if [ $ngx_found = no ]; then + +ngx_feature="IP_TRANSPARENT" +ngx_feature_name="NGX_HAVE_TRANSPARENT_PROXY" +ngx_feature_run=no +ngx_feature_incs="#include + #include " +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="setsockopt(0, IPPROTO_IP, IP_TRANSPARENT, NULL, 0)" +. auto/feature + +fi + + +# FreeBSD bind to any
Re: [PATCH] Configure: don't test alternatives if preferred feature is found
Hey Maxim, On Thu, Jun 30, 2016 at 12:52 PM, Piotr Sikora wrote: > # HG changeset patch > # User Piotr Sikora > # Date 1467064812 25200 > # Mon Jun 27 15:00:12 2016 -0700 > # Node ID 33d0b463aa3484428a30d838f6c58d8fe717746b > # Parent d452cb27639f714bc43b7f3ede417e3e7f8efdd6 > Configure: don't test alternatives if preferred feature is found. Updated diff that retains the SO -> IP -> TCP order. I just moved IP_BIND_ADDRESS_NO_PORT after all NGX_HAVE_TRANSPARENT_PROXY checks. Best regards, Piotr Sikora ___ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel
Re: [PATCH 1 of 2] HTTP: add support for trailers in HTTP responses
Hey Maxim, > Would adding r->trailers_emit (or r->expect_trailers, whichever you > prefer) make you happy? Ping. Best regards, Piotr Sikora ___ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel
Stream: client SSL certificate support
Are there plans to support client certificate verification for streams? Any workarounds available? Is this patch going to be worked into future releases? https://forum.nginx.org/read.php?29,262636,262636 ___ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel