From ja.nginx at mailnull.com Mon Jan 2 22:24:04 2012 From: ja.nginx at mailnull.com (SamB) Date: Mon, 2 Jan 2012 23:24:04 +0100 Subject: [PATCH] HttpXsltModule files relative to location root Message-ID: Hi, I've made a (relatively) simple patch for HttpXsltModule, that adds 2 new config directives and slightly modifies the xslt parsing process in HttpXsltModule: xslt_use_root - enables new xslt file location mode. If enabled non-absolute filenames are being located relatively to root location (if root defined without variables), and not relatively to nginx work directory. To achieve this xslt file parsing has been moved from directive processing routine, to merge routine and file location has been extended accordingly. This makes xslt files deploying easier, especially when deploying beta files (in testing) to production site. Before it has been necessary to modify file paths to match production site config, including modification of xslt include/import directives urls, after enabling it, simple file copy + nginx restart is enough. xslt_stylesheet_param - this is equivalent of xslt parameter passed to xslt_stylesheet, but this works independently and globally. Implemented as configuration directive processing, location parameters merging, and finally xslt stylesheet parameters merging. Again, xslt configuration is a bit simpler because 'common' xslt variables don't need to be configured for each xslt_stylesheet, but can be defined globally as needed. Comments, and suggestion are welcomed. Thanks Sam -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: nginx-1.1.12-xslt.patch Type: application/octet-stream Size: 10853 bytes Desc: not available URL: From mdounin at mdounin.ru Mon Jan 2 23:26:03 2012 From: mdounin at mdounin.ru (Maxim Dounin) Date: Tue, 3 Jan 2012 03:26:03 +0400 Subject: [PATCH] HttpXsltModule files relative to location root In-Reply-To: References: Message-ID: <20120102232603.GB67687@mdounin.ru> Hello! On Mon, Jan 02, 2012 at 11:24:04PM +0100, SamB wrote: > Hi, > I've made a (relatively) simple patch for HttpXsltModule, that adds 2 new > config directives and slightly modifies the xslt parsing process in > HttpXsltModule: > > xslt_use_root - enables new xslt file location mode. If enabled > non-absolute filenames are being located relatively to root location (if > root defined without variables), and not relatively to nginx work > directory. To achieve this xslt file parsing has been moved from directive > processing routine, to merge routine and file location has been extended > accordingly. > This makes xslt files deploying easier, especially when deploying beta > files (in testing) to production site. Before it has been necessary to > modify file paths to match production site config, including modification > of xslt include/import directives urls, after enabling it, simple file copy > + nginx restart is enough. This isn't taking into account root with variables, as well as alias used instead of root. (And the patch doesn't even provide any diagnostics for the case when it's not going to work.) Apart from this, you probably don't want your xslt files to be exposed under document root for security reasons. I believe correct solution for the use case in question would be some form of configuration macros to set both document root and location of xslt files from the common prefix. Right now it may be easily done with trivial external text processing. > xslt_stylesheet_param - this is equivalent of xslt parameter passed to > xslt_stylesheet, but this works independently and globally. Implemented as > configuration directive processing, location parameters merging, and > finally xslt stylesheet parameters merging. > Again, xslt configuration is a bit simpler because 'common' xslt variables > don't need to be configured for each xslt_stylesheet, but can be defined > globally as needed. This may be intresting, but: 1. One change at a time, please. There is no way to accept/review changes which are mixed with other changes. And no unrelated changes, please. If you want change to happen, submit it explicitly as a separate patch. 2. Please follow coding style. There is a lot of style violations in your patch. 3. You merge params with ones specified at previous levels. This is incorrect approach, it should follow the same model as other array-type variables, i.e. it should be inherited from previous levels unless there are own params at the level in question. Maxim Dounin From q2011oct at gmail.com Thu Jan 5 04:55:12 2012 From: q2011oct at gmail.com (J.Q. S.) Date: Wed, 4 Jan 2012 23:55:12 -0500 Subject: client disconnects Message-ID: I've been working on a module to submit web requests to a backend server over UDP, and its been a good exercise in working with nginx internals. Next I could use some advice on dealing with client disconnects - I see ngx_http_upstream_rd_check_broken_connection and ngx_http_upstream_wr_check_broken_connection being set as event handlers for the client connection in the upstream module, but I don't see the handlers put back or the original handlers being called. Wouldn't this interfere with keep-alive behavior on the client connection? Are there other considerations I need to make when dealing with client disconnects? Anything I should do or avoid doing? All help appreciated! -------------- next part -------------- An HTML attachment was scrubbed... URL: From jeremie.legrand at atos.net Fri Jan 6 11:01:23 2012 From: jeremie.legrand at atos.net (=?iso-8859-1?Q?Legrand_J=E9r=E9mie?=) Date: Fri, 6 Jan 2012 12:01:23 +0100 Subject: Issue using ngx.location.capture in Lua Module Message-ID: <6B62F3E8C02D3E40AB7DBD3D5F2647D929E89EBA1E@FRVDX100.fr01.awl.atosorigin.net> Hi, I have a very strange issue with a lua script I use in an access_by_lua_file directive. In this script, I make two subrequests with ngx.location.capture : local authRequest = ngx.location.capture("/memc", { args = { key = ngx.var.key } }) local authDatabaseRequest = ngx.location.capture("/postgres", { args = { key = ngx.var.key } }) The first subrequest goes to location memc defined as follow : location ~ ^/memc { default_type text/plain; set $memc_cmd get; set $memc_key $arg_key; memc_pass memcache; #ACL internal; } It refers to the upstream memcache defined like this : upstream memcache { server 127.0.0.1:11211 max_fails=3 fail_timeout=10s; } The second request goes to location postgres : location /postgres { set $key $arg_key; postgres_pass database; postgres_query "SELECT name FROM key k WHERE mykey = '$key'"; postgres_output value 0 0; } It refers to an upstream database which makes a distant connection to my postgres database : upstream database { postgres_server my_postgres_adress:5433 dbname=mydbname user=myuser password=mypass; } When I start the nginx server and request something, the lua script does correctly the memcache subrequest but I get this message for the postgres subrequest : [error] 24631#0: *28 postgres: connection failed: could not send startup packet: Resource temporarily unavailable If I change the order of subrequests in my script, doing first the postgres subrequest and after the memcache subrequest, there is no error and both subrequests are done successfully. It seems that the memcached subrequest does not release correctly the connection. For performance constraints I need to make the memcache request first. Thanks for help if someone have an idea to resolve this issue. Jeremie Legrand ________________________________ Ce message et les pi?ces jointes sont confidentiels et r?serv?s ? l'usage exclusif de ses destinataires. Il peut ?galement ?tre prot?g? par le secret professionnel. Si vous recevez ce message par erreur, merci d'en avertir imm?diatement l'exp?diteur et de le d?truire. L'int?grit? du message ne pouvant ?tre assur?e sur Internet, la responsabilit? d'Atos ne pourra ?tre recherch?e quant au contenu de ce message. Bien que les meilleurs efforts soient faits pour maintenir cette transmission exempte de tout virus, l'exp?diteur ne donne aucune garantie ? cet ?gard et sa responsabilit? ne saurait ?tre recherch?e pour tout dommage r?sultant d'un virus transmis. This e-mail and the documents attached are confidential and intended solely for the addressee; it may also be privileged. If you receive this e-mail in error, please notify the sender immediately and destroy it. As its integrity cannot be secured on the Internet, the Atos liability cannot be triggered for the message content. Although the sender endeavours to maintain a computer virus-free network, the sender does not warrant that this transmission is virus-free and will not be liable for any damages resulting from any virus transmitted. -------------- next part -------------- An HTML attachment was scrubbed... URL: From alex at alexchamberlain.co.uk Fri Jan 6 16:10:58 2012 From: alex at alexchamberlain.co.uk (Alex Chamberlain) Date: Fri, 6 Jan 2012 16:10:58 +0000 Subject: Best Practice Behaviour of Body Handler Message-ID: Hi all, I've started to develop a RESTful interface onto MongoDB as an Nginx Module. I've started to work on PUT requests, and I'm just wondering about a couple of things with the body handler. My content handler registers the body handler using ngx_http_read_client_request_body. When this gets called, if everything goes correctly, I either want to send 204 No Content or 303 See Other. Therefore, no body. What should I be calling ngx_http_finalize_request with? I'm currently passing zero-length buffers, and I'm getting alerts, so it must be wrong... On the other hand, if something goes wrong, I suspect I should still be calling ngx_http_finalize_request, right? If so, what should the arguements be then? Thanks for your help. My code can be found at https://github.com/alexchamberlain/ngx-mongodb. I'd be very interested on any feedback, but please bear in mind I'm relatively inexperienced, so I expect to make mistakes and really won't mind any friendly advice. Alex Chamberlain -------------- next part -------------- An HTML attachment was scrubbed... URL: From agentzh at gmail.com Sat Jan 7 11:24:33 2012 From: agentzh at gmail.com (agentzh) Date: Sat, 7 Jan 2012 19:24:33 +0800 Subject: Issue using ngx.location.capture in Lua Module In-Reply-To: <6B62F3E8C02D3E40AB7DBD3D5F2647D929E89EBA1E@FRVDX100.fr01.awl.atosorigin.net> References: <6B62F3E8C02D3E40AB7DBD3D5F2647D929E89EBA1E@FRVDX100.fr01.awl.atosorigin.net> Message-ID: On Fri, Jan 6, 2012 at 7:01 PM, Legrand J?r?mie wrote: > > When I start the nginx server and request something, the lua script does > correctly the memcache subrequest but I get this message for the postgres > subrequest : > > [error] 24631#0: *28 postgres: connection failed: could not send startup > packet: Resource temporarily unavailable > Which operating system are you using? I'm guessing you're using the epoll events on Linux with nginx stable versions, no? If you're using epoll on Linux, then it's a known issue that nginx's epoll module could produce stale write events in current stable branch (which has been fixed in the latest 1.1.x devel branch). During the meantime, you can try applying the patch here: https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.0.10-epoll_check_stale_wev.patch It should be applied cleanly to 1.0.11 as well. The real cause of this issue is that PostgreSQL's libpq library is *very* sensitive to stale write events while sending its startup packets. Fixing the stale write event handling in nginx's epoll module can work around it. If you're not using epoll or even not on Linux, please let us know :) Regards, -agentzh From agentzh at gmail.com Sat Jan 7 11:41:56 2012 From: agentzh at gmail.com (agentzh) Date: Sat, 7 Jan 2012 19:41:56 +0800 Subject: Best Practice Behaviour of Body Handler In-Reply-To: References: Message-ID: On Sat, Jan 7, 2012 at 12:10 AM, Alex Chamberlain wrote: > Hi all, > > I've started to develop a RESTful interface onto MongoDB as an Nginx Module. A mongodb driver for Nginx is certainly welcome! But will it block the nginx worker processes on network I/O? > I've started to work on PUT requests, and I'm just wondering about a couple > of things with the body handler. > > My content handler registers the body handler > using?ngx_http_read_client_request_body. > > When this gets called, if everything goes correctly, I either want to send > 204 No Content or 303 See Other. Therefore, no body. What should I be > calling?ngx_http_finalize_request with? I'm currently passing zero-length > buffers, and I'm getting alerts, so it must be wrong... > Calling ngx_http_finalize_request(r, 303) should just work out of the box with the default error page: 303 See Other

303 See Other


nginx/1.0.10 (without pool)
Calling ngx_http_finalize_request(r, 204) should do the work too. You do not need to send response body data I think, unless you want to output a custom error page (for the 303 case). > On the other hand, if something goes wrong, I suspect I should still be > calling?ngx_http_finalize_request, right? If so, what should the arguements > be then? > Just feed the HTTP status codes. > Thanks for your help. My code can be found > at?https://github.com/alexchamberlain/ngx-mongodb. I'd be very interested on > any feedback, but please bear in mind I'm relatively inexperienced, so I > expect to make mistakes and really won't mind any friendly advice. > I really hope that it is a nonblocking driver or it'll be almost useless for production. Once we have a native mongodb driver for Nginx, we can immediately reuse it as a client library in ngx_lua by means of Nginx subrequests :D Best wishes! -agentzh From contact at derrickpetzold.com Sat Jan 7 03:44:35 2012 From: contact at derrickpetzold.com (Derrick Petzold) Date: Fri, 6 Jan 2012 17:44:35 -1000 Subject: [PATCH] Add support for uwsgi host and port variables Message-ID: Hello, I added support for setting the following variables: uwsgi_host - The host and port of the uwsgi server that handled the request. uwsgi_port - The port of the uwsgi server that handled the request. They are modeled after the proxy_host and proxy_port variables. (I shamelessly copied that code). The major change is that the uwsgi module now has its own context structure whereas before it was using ngx_http_status_t. Please let me know if you have any questions or comments. Regards, Derrick -------------- next part -------------- A non-text attachment was scrubbed... Name: uwsgi_host_and_port_variables.diff Type: text/x-patch Size: 8738 bytes Desc: not available URL: From mdounin at mdounin.ru Sun Jan 8 13:20:20 2012 From: mdounin at mdounin.ru (Maxim Dounin) Date: Sun, 8 Jan 2012 17:20:20 +0400 Subject: [PATCH] Add support for uwsgi host and port variables In-Reply-To: References: Message-ID: <20120108132020.GA67687@mdounin.ru> Hello! On Fri, Jan 06, 2012 at 05:44:35PM -1000, Derrick Petzold wrote: > Hello, > > I added support for setting the following variables: > > uwsgi_host - The host and port of the uwsgi server that handled the request. > uwsgi_port - The port of the uwsgi server that handled the request. Just a side note: this is incorrect definition, $proxy_host is a host/port as written in the proxy_pass directive, not a "server that handled the request". To list servers used to handle a request the $upstream_addr variable is available, see here: http://nginx.org/en/docs/http/ngx_http_upstream_module.html#variables > They are modeled after the proxy_host and proxy_port variables. (I > shamelessly copied that code). The major change is that the uwsgi > module now has its own context structure whereas before it was using > ngx_http_status_t. Please let me know if you have any questions or > comments. The main reason why $proxy_host exists is that it's needed to create correct http request with a Host header from a proxy_pass directive. It's mostly internal variable. Why this is needed for uwsgi (and not fastcgi/scgi)? Maxim Dounin From piotr.sikora at frickle.com Mon Jan 9 14:17:08 2012 From: piotr.sikora at frickle.com (Piotr Sikora) Date: Mon, 9 Jan 2012 15:17:08 +0100 Subject: Best Practice Behaviour of Body Handler In-Reply-To: References: Message-ID: <94B574A920924BE08D8051219A1718AA@Desktop> Hey, >> Thanks for your help. My code can be found >> at https://github.com/alexchamberlain/ngx-mongodb. I'd be very interested >> on >> any feedback, but please bear in mind I'm relatively inexperienced, so I >> expect to make mistakes and really won't mind any friendly advice. > > I really hope that it is a nonblocking driver or it'll be almost > useless for production. Once we have a native mongodb driver for > Nginx, we can immediately reuse it as a client library in ngx_lua by > means of Nginx subrequests :D The code that Alex wrote (or to be more precise, the nginx-gridfs, on which this module is based on) is blocking. On the side note, ngx_mongo is under active development and is scheduled to be open sourced in a few months. Best regards, Piotr Sikora < piotr.sikora at frickle.com > From piotr.sikora at frickle.com Mon Jan 9 14:59:46 2012 From: piotr.sikora at frickle.com (Piotr Sikora) Date: Mon, 9 Jan 2012 15:59:46 +0100 Subject: Issue using ngx.location.capture in Lua Module In-Reply-To: <6B62F3E8C02D3E40AB7DBD3D5F2647D929E89EBA1E@FRVDX100.fr01.awl.atosorigin.net> References: <6B62F3E8C02D3E40AB7DBD3D5F2647D929E89EBA1E@FRVDX100.fr01.awl.atosorigin.net> Message-ID: Hey, > [error] 24631#0: *28 postgres: connection failed: could not send startup > packet: Resource temporarily unavailable Which version of nginx and ngx_postgres are you using? And on what OS? Best regards, Piotr Sikora < piotr.sikora at frickle.com > From alex at alexchamberlain.co.uk Mon Jan 9 15:01:20 2012 From: alex at alexchamberlain.co.uk (Alex Chamberlain) Date: Mon, 9 Jan 2012 15:01:20 +0000 Subject: Best Practice Behaviour of Body Handler In-Reply-To: <94B574A920924BE08D8051219A1718AA@Desktop> References: <94B574A920924BE08D8051219A1718AA@Desktop> Message-ID: > The code that Alex wrote (or to be more precise, the nginx-gridfs, on which this module is based on) is blocking. Yep. The mongo code can be replaced by combining Mongo's wire protocol with nginx events based networking. (I think - not done it!) > On the side note, ngx_mongo is under active development and is scheduled to be open sourced in a few months. By Frickle? Is it non-blocking? Alex From piotr.sikora at frickle.com Mon Jan 9 15:08:22 2012 From: piotr.sikora at frickle.com (Piotr Sikora) Date: Mon, 9 Jan 2012 16:08:22 +0100 Subject: Best Practice Behaviour of Body Handler In-Reply-To: References: <94B574A920924BE08D8051219A1718AA@Desktop> Message-ID: <4B966A8B04E34C49B1626FE0E826FF62@Desktop> Hey, > The mongo code can be replaced by combining Mongo's wire protocol > with nginx events based networking. (I think - not done it!) Indeed. > By Frickle? Yes. > Is it non-blocking? Yes. Best regards, Piotr Sikora < piotr.sikora at frickle.com > From alex at alexchamberlain.co.uk Mon Jan 9 20:09:36 2012 From: alex at alexchamberlain.co.uk (Alex Chamberlain) Date: Mon, 9 Jan 2012 20:09:36 +0000 Subject: Best Practice Behaviour of Body Handler In-Reply-To: <4B966A8B04E34C49B1626FE0E826FF62@Desktop> References: <94B574A920924BE08D8051219A1718AA@Desktop> <4B966A8B04E34C49B1626FE0E826FF62@Desktop> Message-ID: >> The mongo code can be replaced by combining Mongo's wire protocol >> with nginx events based networking. (I think - not done it!) > > > Indeed. > >> By Frickle? > > > Yes. > >> Is it non-blocking? > > > Yes. Sounds great! Will it accept/output BSON or JSON (or something else)? I know mine outputs JSON at the moment, but I was thinking it would be better for it to accept/output BSON instead, with a JSON filter as a separate module. This allows for post-processing the BSON with another module and interchanging the *final* format delivered to the client, as well as separating the business logic from the display logic physically. As a side note, is there a way of controlling the order filters are loaded? If so, can you point me towards some docs? Thanks, Alex From piotr.sikora at frickle.com Mon Jan 9 21:56:48 2012 From: piotr.sikora at frickle.com (Piotr Sikora) Date: Mon, 9 Jan 2012 22:56:48 +0100 Subject: Best Practice Behaviour of Body Handler In-Reply-To: References: <94B574A920924BE08D8051219A1718AA@Desktop> <4B966A8B04E34C49B1626FE0E826FF62@Desktop> Message-ID: <737A1DD781354BCA874FB9DF0E273E19@Desktop> Hi, > Will it accept/output BSON or JSON (or something else)? I know mine > outputs JSON at the moment, but I was thinking it would be better for > it to accept/output BSON instead, with a JSON filter as a separate > module. This allows for post-processing the BSON with another module > and interchanging the *final* format delivered to the client, as well > as separating the business logic from the display logic physically. Output: BSON and JSON (via BSON-JSON output filter). Input: currently it's JSON, but since it's converted to BSON before being passed to mongodb, I don't see a reason why it shouldn't accept BSON as well ;) > As a side note, is there a way of controlling the order filters are > loaded? If so, can you point me towards some docs? Order of 3rd-party filter is the same as order of --add-module directives passed to the ./configure script. Best regards, Piotr Sikora < piotr.sikora at frickle.com > From ru at nginx.com Tue Jan 10 07:28:33 2012 From: ru at nginx.com (ru at nginx.com) Date: Tue, 10 Jan 2012 07:28:33 +0000 Subject: [nginx] svn commit: r4398 - trunk/src/core Message-ID: <20120110072833.6A96B3F9C28@mail.nginx.com> Author: ru Date: 2012-01-10 07:28:32 +0000 (Tue, 10 Jan 2012) New Revision: 4398 Log: Changed ngx_log_debugN() macros to verify the number of arguments when built with debugging. Modified: trunk/src/core/ngx_log.h Modified: trunk/src/core/ngx_log.h =================================================================== --- trunk/src/core/ngx_log.h 2011-12-29 15:58:53 UTC (rev 4397) +++ trunk/src/core/ngx_log.h 2012-01-10 07:28:32 UTC (rev 4398) @@ -121,17 +121,40 @@ #if (NGX_HAVE_VARIADIC_MACROS) -#define ngx_log_debug0 ngx_log_debug -#define ngx_log_debug1 ngx_log_debug -#define ngx_log_debug2 ngx_log_debug -#define ngx_log_debug3 ngx_log_debug -#define ngx_log_debug4 ngx_log_debug -#define ngx_log_debug5 ngx_log_debug -#define ngx_log_debug6 ngx_log_debug -#define ngx_log_debug7 ngx_log_debug -#define ngx_log_debug8 ngx_log_debug +#define ngx_log_debug0(level, log, err, fmt) \ + ngx_log_debug(level, log, err, fmt) +#define ngx_log_debug1(level, log, err, fmt, arg1) \ + ngx_log_debug(level, log, err, fmt, arg1) +#define ngx_log_debug2(level, log, err, fmt, arg1, arg2) \ + ngx_log_debug(level, log, err, fmt, arg1, arg2) + +#define ngx_log_debug3(level, log, err, fmt, arg1, arg2, arg3) \ + ngx_log_debug(level, log, err, fmt, arg1, arg2, arg3) + +#define ngx_log_debug4(level, log, err, fmt, arg1, arg2, arg3, arg4) \ + ngx_log_debug(level, log, err, fmt, arg1, arg2, arg3, arg4) + +#define ngx_log_debug5(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5) \ + ngx_log_debug(level, log, err, fmt, arg1, arg2, arg3, arg4, arg5) + +#define ngx_log_debug6(level, log, err, fmt, \ + arg1, arg2, arg3, arg4, arg5, arg6) \ + ngx_log_debug(level, log, err, fmt, \ + arg1, arg2, arg3, arg4, arg5, arg6) + +#define ngx_log_debug7(level, log, err, fmt, \ + arg1, arg2, arg3, arg4, arg5, arg6, arg7) \ + ngx_log_debug(level, log, err, fmt, \ + arg1, arg2, arg3, arg4, arg5, arg6, arg7) + +#define ngx_log_debug8(level, log, err, fmt, \ + arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) \ + ngx_log_debug(level, log, err, fmt, \ + arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) + + #else /* NO VARIADIC MACROS */ #define ngx_log_debug0(level, log, err, fmt) \ From vbart at nginx.com Tue Jan 10 15:09:45 2012 From: vbart at nginx.com (vbart at nginx.com) Date: Tue, 10 Jan 2012 15:09:45 +0000 Subject: [nginx] svn commit: r4399 - trunk/src/http/modules Message-ID: Author: vbart Date: 2012-01-10 15:09:45 +0000 (Tue, 10 Jan 2012) New Revision: 4399 Modified: trunk/src/http/modules/ngx_http_proxy_module.c Log: Fixed: proxy_redirect with regex might broke Refresh header. The problem was localized in ngx_http_proxy_rewrite_redirect_regex() handler function which did not take into account prefix when overwriting header value. Modified: trunk/src/http/modules/ngx_http_proxy_module.c =================================================================== --- trunk/src/http/modules/ngx_http_proxy_module.c 2012-01-10 07:28:32 UTC (rev 4398) +++ trunk/src/http/modules/ngx_http_proxy_module.c 2012-01-10 15:09:45 UTC (rev 4399) @@ -2348,6 +2348,8 @@ ngx_http_proxy_rewrite_redirect_regex(ngx_http_request_t *r, ngx_table_elt_t *h, size_t prefix, ngx_http_proxy_redirect_t *pr) { + size_t len; + u_char *data; ngx_str_t redirect, replacement; redirect.len = h->value.len - prefix; @@ -2361,8 +2363,24 @@ return NGX_ERROR; } - h->value = replacement; + if (!prefix) { + h->value = replacement; + return NGX_OK; + } + len = prefix + replacement.len; + + data = ngx_pnalloc(r->pool, len); + if (data == NULL) { + return NGX_ERROR; + } + + ngx_memcpy(data, h->value.data, prefix); + ngx_memcpy(data + prefix, replacement.data, replacement.len); + + h->value.len = len; + h->value.data = data; + return NGX_OK; } From jeremie.legrand at atos.net Tue Jan 10 15:23:40 2012 From: jeremie.legrand at atos.net (=?iso-8859-1?Q?Legrand_J=E9r=E9mie?=) Date: Tue, 10 Jan 2012 16:23:40 +0100 Subject: Issue using ngx.location.capture in Lua Module Message-ID: <6B62F3E8C02D3E40AB7DBD3D5F2647D929E9950E6E@FRVDX100.fr01.awl.atosorigin.net> Thanks agentzh for your answer. I was exactly in the use case you described. The patch worked perfectly for me. I hope it will be added to the next NGINX stable version. Regards, J. Legrand On Fri, Jan 6, 2012 at 7:01 PM, Legrand J?r?mie > wrote: > > When I start the nginx server and request something, the lua script does > correctly the memcache subrequest but I get this message for the postgres > subrequest : > > [error] 24631#0: *28 postgres: connection failed: could not send startup > packet: Resource temporarily unavailable > Which operating system are you using? I'm guessing you're using the epoll events on Linux with nginx stable versions, no? If you're using epoll on Linux, then it's a known issue that nginx's epoll module could produce stale write events in current stable branch (which has been fixed in the latest 1.1.x devel branch). During the meantime, you can try applying the patch here: https://github.com/agentzh/ngx_openresty/blob/master/patches/nginx-1.0.10-epoll_check_stale_wev.patch It should be applied cleanly to 1.0.11 as well. The real cause of this issue is that PostgreSQL's libpq library is *very* sensitive to stale write events while sending its startup packets. Fixing the stale write event handling in nginx's epoll module can work around it. If you're not using epoll or even not on Linux, please let us know :) Regards, -agentzh ________________________________ Ce message et les pi?ces jointes sont confidentiels et r?serv?s ? l'usage exclusif de ses destinataires. Il peut ?galement ?tre prot?g? par le secret professionnel. Si vous recevez ce message par erreur, merci d'en avertir imm?diatement l'exp?diteur et de le d?truire. L'int?grit? du message ne pouvant ?tre assur?e sur Internet, la responsabilit? d'Atos ne pourra ?tre recherch?e quant au contenu de ce message. Bien que les meilleurs efforts soient faits pour maintenir cette transmission exempte de tout virus, l'exp?diteur ne donne aucune garantie ? cet ?gard et sa responsabilit? ne saurait ?tre recherch?e pour tout dommage r?sultant d'un virus transmis. This e-mail and the documents attached are confidential and intended solely for the addressee; it may also be privileged. If you receive this e-mail in error, please notify the sender immediately and destroy it. As its integrity cannot be secured on the Internet, the Atos liability cannot be triggered for the message content. Although the sender endeavours to maintain a computer virus-free network, the sender does not warrant that this transmission is virus-free and will not be liable for any damages resulting from any virus transmitted. -------------- next part -------------- An HTML attachment was scrubbed... URL: From q2011oct at gmail.com Wed Jan 11 04:20:34 2012 From: q2011oct at gmail.com (J.Q. S.) Date: Tue, 10 Jan 2012 23:20:34 -0500 Subject: ngx_resolver.c Message-ID: ngx_resolver.c, lines 590-592, shouldn't they read: if (!ngx_queue_empty(&r->name_resend_queue)) { ngx_add_timer(r->event, (ngx_msec_t) (r->resend_timeout * 1000)); } i.e. set the timer if the queue isn't empty? From mdounin at mdounin.ru Wed Jan 11 10:25:51 2012 From: mdounin at mdounin.ru (Maxim Dounin) Date: Wed, 11 Jan 2012 14:25:51 +0400 Subject: ngx_resolver.c In-Reply-To: References: Message-ID: <20120111102551.GT67687@mdounin.ru> Hello! On Tue, Jan 10, 2012 at 11:20:34PM -0500, J.Q. S. wrote: > ngx_resolver.c, lines 590-592, shouldn't they read: > > if (!ngx_queue_empty(&r->name_resend_queue)) { > ngx_add_timer(r->event, (ngx_msec_t) (r->resend_timeout * 1000)); > } > > i.e. set the timer if the queue isn't empty? No. Timer has to be set if it wasn't set previously, i.e. if queue is empty. Maxim Dounin From mdounin at mdounin.ru Wed Jan 11 11:09:05 2012 From: mdounin at mdounin.ru (mdounin at mdounin.ru) Date: Wed, 11 Jan 2012 11:09:05 +0000 Subject: [nginx] svn commit: r4400 - trunk/src/http/modules Message-ID: <20120111110906.7069F3F9C58@mail.nginx.com> Author: mdounin Date: 2012-01-11 11:09:05 +0000 (Wed, 11 Jan 2012) New Revision: 4400 Log: Fixed limit_req burst/nodelay inheritance (ticket #76). The problems was introduced in r4381 (1.1.12). Modified: trunk/src/http/modules/ngx_http_limit_req_module.c Modified: trunk/src/http/modules/ngx_http_limit_req_module.c =================================================================== --- trunk/src/http/modules/ngx_http_limit_req_module.c 2012-01-10 15:09:45 UTC (rev 4399) +++ trunk/src/http/modules/ngx_http_limit_req_module.c 2012-01-11 11:09:05 UTC (rev 4400) @@ -570,6 +570,8 @@ if (conf->shm_zone == NULL) { conf->shm_zone = prev->shm_zone; + conf->burst = prev->burst; + conf->nodelay = prev->nodelay; } ngx_conf_merge_uint_value(conf->limit_log_level, prev->limit_log_level, From mdounin at mdounin.ru Wed Jan 11 11:15:01 2012 From: mdounin at mdounin.ru (mdounin at mdounin.ru) Date: Wed, 11 Jan 2012 11:15:01 +0000 Subject: [nginx] svn commit: r4401 - in trunk/src: event http/modules mail Message-ID: <20120111111501.4F2773F9C1D@mail.nginx.com> Author: mdounin Date: 2012-01-11 11:15:00 +0000 (Wed, 11 Jan 2012) New Revision: 4401 Log: Added support for TLSv1.1, TLSv1.2 in ssl_protocols directive. Support for TLSv1.1 and TLSv1.2 protocols was introduced in OpenSSL 1.0.1 (-beta1 was recently released). This change makes it possible to disable these protocols and/or enable them without other protocols. Modified: trunk/src/event/ngx_event_openssl.c trunk/src/event/ngx_event_openssl.h trunk/src/http/modules/ngx_http_proxy_module.c trunk/src/http/modules/ngx_http_ssl_module.c trunk/src/mail/ngx_mail_ssl_module.c Modified: trunk/src/event/ngx_event_openssl.c =================================================================== --- trunk/src/event/ngx_event_openssl.c 2012-01-11 11:09:05 UTC (rev 4400) +++ trunk/src/event/ngx_event_openssl.c 2012-01-11 11:15:00 UTC (rev 4401) @@ -78,18 +78,6 @@ }; -static long ngx_ssl_protocols[] = { - SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3|SSL_OP_NO_TLSv1, - SSL_OP_NO_SSLv3|SSL_OP_NO_TLSv1, - SSL_OP_NO_SSLv2|SSL_OP_NO_TLSv1, - SSL_OP_NO_TLSv1, - SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3, - SSL_OP_NO_SSLv3, - SSL_OP_NO_SSLv2, - 0, -}; - - int ngx_ssl_connection_index; int ngx_ssl_server_conf_index; int ngx_ssl_session_cache_index; @@ -171,9 +159,25 @@ SSL_CTX_set_options(ssl->ctx, SSL_OP_SINGLE_DH_USE); - if (ngx_ssl_protocols[protocols >> 1] != 0) { - SSL_CTX_set_options(ssl->ctx, ngx_ssl_protocols[protocols >> 1]); + if (!(protocols & NGX_SSL_SSLv2)) { + SSL_CTX_set_options(ssl->ctx, SSL_OP_NO_SSLv2); } + if (!(protocols & NGX_SSL_SSLv3)) { + SSL_CTX_set_options(ssl->ctx, SSL_OP_NO_SSLv3); + } + if (!(protocols & NGX_SSL_TLSv1)) { + SSL_CTX_set_options(ssl->ctx, SSL_OP_NO_TLSv1); + } +#ifdef SSL_OP_NO_TLSv1_1 + if (!(protocols & NGX_SSL_TLSv1_1)) { + SSL_CTX_set_options(ssl->ctx, SSL_OP_NO_TLSv1_1); + } +#endif +#ifdef SSL_OP_NO_TLSv1_2 + if (!(protocols & NGX_SSL_TLSv1_2)) { + SSL_CTX_set_options(ssl->ctx, SSL_OP_NO_TLSv1_2); + } +#endif #ifdef SSL_OP_NO_COMPRESSION SSL_CTX_set_options(ssl->ctx, SSL_OP_NO_COMPRESSION); Modified: trunk/src/event/ngx_event_openssl.h =================================================================== --- trunk/src/event/ngx_event_openssl.h 2012-01-11 11:09:05 UTC (rev 4400) +++ trunk/src/event/ngx_event_openssl.h 2012-01-11 11:15:00 UTC (rev 4401) @@ -81,9 +81,11 @@ -#define NGX_SSL_SSLv2 2 -#define NGX_SSL_SSLv3 4 -#define NGX_SSL_TLSv1 8 +#define NGX_SSL_SSLv2 0x0002 +#define NGX_SSL_SSLv3 0x0004 +#define NGX_SSL_TLSv1 0x0008 +#define NGX_SSL_TLSv1_1 0x0010 +#define NGX_SSL_TLSv1_2 0x0020 #define NGX_SSL_BUFFER 1 Modified: trunk/src/http/modules/ngx_http_proxy_module.c =================================================================== --- trunk/src/http/modules/ngx_http_proxy_module.c 2012-01-11 11:09:05 UTC (rev 4400) +++ trunk/src/http/modules/ngx_http_proxy_module.c 2012-01-11 11:15:00 UTC (rev 4401) @@ -3598,7 +3598,9 @@ plcf->upstream.ssl->log = cf->log; if (ngx_ssl_create(plcf->upstream.ssl, - NGX_SSL_SSLv2|NGX_SSL_SSLv3|NGX_SSL_TLSv1, NULL) + NGX_SSL_SSLv2|NGX_SSL_SSLv3|NGX_SSL_TLSv1 + |NGX_SSL_TLSv1_1|NGX_SSL_TLSv1_2, + NULL) != NGX_OK) { return NGX_ERROR; Modified: trunk/src/http/modules/ngx_http_ssl_module.c =================================================================== --- trunk/src/http/modules/ngx_http_ssl_module.c 2012-01-11 11:09:05 UTC (rev 4400) +++ trunk/src/http/modules/ngx_http_ssl_module.c 2012-01-11 11:15:00 UTC (rev 4401) @@ -37,6 +37,8 @@ { ngx_string("SSLv2"), NGX_SSL_SSLv2 }, { ngx_string("SSLv3"), NGX_SSL_SSLv3 }, { ngx_string("TLSv1"), NGX_SSL_TLSv1 }, + { ngx_string("TLSv1.1"), NGX_SSL_TLSv1_1 }, + { ngx_string("TLSv1.2"), NGX_SSL_TLSv1_2 }, { ngx_null_string, 0 } }; @@ -364,7 +366,8 @@ prev->prefer_server_ciphers, 0); ngx_conf_merge_bitmask_value(conf->protocols, prev->protocols, - (NGX_CONF_BITMASK_SET|NGX_SSL_SSLv3|NGX_SSL_TLSv1)); + (NGX_CONF_BITMASK_SET|NGX_SSL_SSLv3|NGX_SSL_TLSv1 + |NGX_SSL_TLSv1_1|NGX_SSL_TLSv1_2)); ngx_conf_merge_uint_value(conf->verify, prev->verify, 0); ngx_conf_merge_uint_value(conf->verify_depth, prev->verify_depth, 1); Modified: trunk/src/mail/ngx_mail_ssl_module.c =================================================================== --- trunk/src/mail/ngx_mail_ssl_module.c 2012-01-11 11:09:05 UTC (rev 4400) +++ trunk/src/mail/ngx_mail_ssl_module.c 2012-01-11 11:15:00 UTC (rev 4401) @@ -37,6 +37,8 @@ { ngx_string("SSLv2"), NGX_SSL_SSLv2 }, { ngx_string("SSLv3"), NGX_SSL_SSLv3 }, { ngx_string("TLSv1"), NGX_SSL_TLSv1 }, + { ngx_string("TLSv1.1"), NGX_SSL_TLSv1_1 }, + { ngx_string("TLSv1.2"), NGX_SSL_TLSv1_2 }, { ngx_null_string, 0 } }; @@ -206,7 +208,8 @@ prev->prefer_server_ciphers, 0); ngx_conf_merge_bitmask_value(conf->protocols, prev->protocols, - (NGX_CONF_BITMASK_SET|NGX_SSL_SSLv3|NGX_SSL_TLSv1)); + (NGX_CONF_BITMASK_SET|NGX_SSL_SSLv3|NGX_SSL_TLSv1 + |NGX_SSL_TLSv1_1|NGX_SSL_TLSv1_2)); ngx_conf_merge_str_value(conf->certificate, prev->certificate, ""); ngx_conf_merge_str_value(conf->certificate_key, prev->certificate_key, ""); From toli at webforge.bg Thu Jan 12 09:32:20 2012 From: toli at webforge.bg (Anatoli Marinov) Date: Thu, 12 Jan 2012 11:32:20 +0200 Subject: proxy_cache Message-ID: <4F0EA8A4.1080405@webforge.bg> Hello Colleagues, I found a performance issue with proxy_cache module. For example I have installed 2 servers with nginx-1.0.10. First one(A) works as a reverse proxy and the second one(B) is a storage with many big files -- 1GB -- 2GB. The link between A and B for example may serve 1 MBps. There is a new object on B and it is not yet cached on A. Let we assume this is a hot new object and A receives 1000 requests for 3 seconds for it. Because the object is not cached the requests will pass through upstream to B and incoming 1000 streams will be saved on A in tmp directory as a separate files. After every request has completed the files from tmp directory will be moved to cache directory. 1000 equal operations for one and the same object. In addition every object will be cached slow because there are 999 other streams. This 1 GB object will be downloaded 1000 times before it may be cached and this is not optimal at all. Am I missing something? It may be my configuration issue? Is there a solution for that? Cheers Anatoli Marinov -------------- next part -------------- An HTML attachment was scrubbed... URL: From andrew at nginx.com Thu Jan 12 09:33:35 2012 From: andrew at nginx.com (Andrew Alexeev) Date: Thu, 12 Jan 2012 13:33:35 +0400 Subject: proxy_cache In-Reply-To: <4F0EA8A4.1080405@webforge.bg> References: <4F0EA8A4.1080405@webforge.bg> Message-ID: <9AEF8CC4-D17E-4738-81AB-79F156F7C0F3@nginx.com> Check this one, pls :) http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_lock On Jan 12, 2012, at 1:32 PM, Anatoli Marinov wrote: > Hello Colleagues, > I found a performance issue with proxy_cache module. > > For example I have installed 2 servers with nginx-1.0.10. First one(A) works as a reverse proxy and the second one(B) is a storage with many big files ? 1GB ? 2GB. > The link between A and B for example may serve 1 MBps. > > There is a new object on B and it is not yet cached on A. > Let we assume this is a hot new object and A receives 1000 requests for 3 seconds for it. Because the object is not cached the requests will pass through upstream to B and incoming 1000 streams will be saved on A in tmp directory as a separate files. After every request has completed the files from tmp directory will be moved to cache directory. 1000 equal operations for one and the same object. In addition every object will be cached slow because there are 999 other streams. > > This 1 GB object will be downloaded 1000 times before it may be cached and this is not optimal at all. > > Am I missing something? It may be my configuration issue? > Is there a solution for that? > Cheers > Anatoli Marinov > _______________________________________________ > nginx-devel mailing list > nginx-devel at nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-devel -------------- next part -------------- An HTML attachment was scrubbed... URL: From toli at webforge.bg Thu Jan 12 09:49:23 2012 From: toli at webforge.bg (Anatoli Marinov) Date: Thu, 12 Jan 2012 11:49:23 +0200 Subject: proxy_cache In-Reply-To: <9AEF8CC4-D17E-4738-81AB-79F156F7C0F3@nginx.com> References: <4F0EA8A4.1080405@webforge.bg> <9AEF8CC4-D17E-4738-81AB-79F156F7C0F3@nginx.com> Message-ID: <4F0EACA3.1050807@webforge.bg> I know this configuration variable. It has been added by Maxim last mouth in unstable (as i remembered but I am not absolutely sure). It seem to be a workaround and will not solve the problem. I think it is unusable. If we use it for the same case: In first 1 second A receives 1000 requests. Only 1 request will be send to B, for first request that A receives. The others 999 will wait for example 5 seconds. The link btw A and B is 1 MB per second and for 5 seconds A may receive 5 MB of data, so after 5 seconds 999 requests will be sent to B. Is it right? On 01/12/2012 11:33 AM, Andrew Alexeev wrote: > Check this one, pls :) > http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_lock > > On Jan 12, 2012, at 1:32 PM, Anatoli Marinov wrote: > >> Hello Colleagues, >> >> I found a performance issue with proxy_cache module. >> >> >> For example I have installed 2 servers with nginx-1.0.10. First >> one(A) works as a reverse proxy and the second one(B) is a storage >> with many big files ? 1GB ? 2GB. >> >> The link between A and B for example may serve 1 MBps. >> >> >> There is a new object on B and it is not yet cached on A. >> >> Let we assume this is a hot new object and A receives 1000 requests >> for 3 seconds for it. Because the object is not cached the requests >> will pass through upstream to B and incoming 1000 streams will be >> saved on A in tmp directory as a separate files. After every request >> has completed the files from tmp directory will be moved to cache >> directory. 1000 equal operations for one and the same object. In >> addition every object will be cached slow because there are 999 other >> streams. >> >> >> This 1 GB object will be downloaded 1000 times before it may be >> cached and this is not optimal at all. >> >> >> Am I missing something? It may be my configuration issue? >> >> Is there a solution for that? >> >> Cheers >> Anatoli Marinov >> >> _______________________________________________ >> nginx-devel mailing list >> nginx-devel at nginx.org >> http://mailman.nginx.org/mailman/listinfo/nginx-devel > > > _______________________________________________ > nginx-devel mailing list > nginx-devel at nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-devel -------------- next part -------------- An HTML attachment was scrubbed... URL: From appa at perusio.net Thu Jan 12 12:30:21 2012 From: appa at perusio.net (=?UTF-8?B?QW50w7NuaW8=?= P. P. Almeida) Date: Thu, 12 Jan 2012 12:30:21 +0000 Subject: proxy_cache In-Reply-To: <4F0EACA3.1050807@webforge.bg> References: <4F0EA8A4.1080405@webforge.bg> <9AEF8CC4-D17E-4738-81AB-79F156F7C0F3@nginx.com> <4F0EACA3.1050807@webforge.bg> Message-ID: <87hb01xfvm.wl%appa@perusio.net> On 12 Jan 2012 09h49 WET, toli at webforge.bg wrote: > I know this configuration variable. It has been added by Maxim last > mouth in unstable (as i remembered but I am not absolutely sure). It > seem to be a workaround and will not solve the problem. I think it > is unusable. > > If we use it for the same case: In first 1 second A receives 1000 > requests. Only 1 request will be send to B, for first request that A > receives. The others 999 will wait for example 5 seconds. The link > btw A and B is 1 MB per second and for 5 seconds A may receive 5 MB > of data, so after 5 seconds 999 requests will be sent to B. > > Is it right? > Why don't use incron or other inotify based tool to pre-fetch the assets? There's also http://wiki.nginx.org/HttpProxyModule#proxy_store which IMO seems more adequate to your setup. Other option is to use something like auth_request with a script or the embedded Lua (http://wiki.nginx.org/HttpLuaModule) or Perl modules (https://github.com/zzzcpan/nginx-perl) and do some scripting. --- appa From mdounin at mdounin.ru Thu Jan 12 12:34:01 2012 From: mdounin at mdounin.ru (Maxim Dounin) Date: Thu, 12 Jan 2012 16:34:01 +0400 Subject: proxy_cache In-Reply-To: <4F0EACA3.1050807@webforge.bg> References: <4F0EA8A4.1080405@webforge.bg> <9AEF8CC4-D17E-4738-81AB-79F156F7C0F3@nginx.com> <4F0EACA3.1050807@webforge.bg> Message-ID: <20120112123401.GB67687@mdounin.ru> Hello! On Thu, Jan 12, 2012 at 11:49:23AM +0200, Anatoli Marinov wrote: > I know this configuration variable. It has been added by Maxim last > mouth in unstable (as i remembered but I am not absolutely sure). It > seem to be a workaround and will not solve the problem. I think it > is unusable. > > If we use it for the same case: > In first 1 second A receives 1000 requests. Only 1 request will be > send to B, for first request that A receives. The others 999 will > wait for example 5 seconds. The link btw A and B is 1 MB per second > and for 5 seconds A may receive 5 MB of data, so after 5 seconds 999 > requests will be sent to B. > > Is it right? Yes. The remaining questions are: are you serving "many big files ? 1GB ? 2GB" over 1MB/s link? And 1000 simulteneous requests to the same file are likely situation in your workload? If yes, you may reconsider your network configuration. You may also try to tune proxy_cache_lock_timeout (default is set low enough to ensure minimal QoS impact), but it isn't likely to help much in the particular situation described. Ideally (for big files use case), we should be able to stream the same response to all clients requesting the file (while downloading it from upstream), but this isn't likely to happen soon. In relatively near plans is to improve cache lock mechanism to make it possible to switch off cache (and thus save some disk resources) in case of lock timeout. Maxim Dounin > > > On 01/12/2012 11:33 AM, Andrew Alexeev wrote: > >Check this one, pls :) > >http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_lock > > > >On Jan 12, 2012, at 1:32 PM, Anatoli Marinov wrote: > > > >>Hello Colleagues, > >> > >>I found a performance issue with proxy_cache module. > >> > >> > >>For example I have installed 2 servers with nginx-1.0.10. First > >>one(A) works as a reverse proxy and the second one(B) is a > >>storage with many big files ? 1GB ? 2GB. > >> > >>The link between A and B for example may serve 1 MBps. > >> > >> > >>There is a new object on B and it is not yet cached on A. > >> > >>Let we assume this is a hot new object and A receives 1000 > >>requests for 3 seconds for it. Because the object is not cached > >>the requests will pass through upstream to B and incoming 1000 > >>streams will be saved on A in tmp directory as a separate files. > >>After every request has completed the files from tmp directory > >>will be moved to cache directory. 1000 equal operations for one > >>and the same object. In addition every object will be cached > >>slow because there are 999 other streams. > >> > >> > >>This 1 GB object will be downloaded 1000 times before it may be > >>cached and this is not optimal at all. > >> > >> > >>Am I missing something? It may be my configuration issue? > >> > >>Is there a solution for that? > >> > >>Cheers > >>Anatoli Marinov > >> > >>_______________________________________________ > >>nginx-devel mailing list > >>nginx-devel at nginx.org > >>http://mailman.nginx.org/mailman/listinfo/nginx-devel > > > > > >_______________________________________________ > >nginx-devel mailing list > >nginx-devel at nginx.org > >http://mailman.nginx.org/mailman/listinfo/nginx-devel > > _______________________________________________ > nginx-devel mailing list > nginx-devel at nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-devel From toli at webforge.bg Thu Jan 12 12:40:15 2012 From: toli at webforge.bg (Anatoli Marinov) Date: Thu, 12 Jan 2012 14:40:15 +0200 Subject: proxy_cache In-Reply-To: <87hb01xfvm.wl%appa@perusio.net> References: <4F0EA8A4.1080405@webforge.bg> <9AEF8CC4-D17E-4738-81AB-79F156F7C0F3@nginx.com> <4F0EACA3.1050807@webforge.bg> <87hb01xfvm.wl%appa@perusio.net> Message-ID: <4F0ED4AF.4000602@webforge.bg> Yes I can pre-fetch the sets but it also is an workaround and it requires time for pre-fetching. Currently I am working to get this approach on. On 01/12/2012 02:30 PM, Ant?nio P. P. Almeida wrote: > On 12 Jan 2012 09h49 WET, toli at webforge.bg wrote: > > >> I know this configuration variable. It has been added by Maxim last >> mouth in unstable (as i remembered but I am not absolutely sure). It >> seem to be a workaround and will not solve the problem. I think it >> is unusable. >> >> If we use it for the same case: In first 1 second A receives 1000 >> requests. Only 1 request will be send to B, for first request that A >> receives. The others 999 will wait for example 5 seconds. The link >> btw A and B is 1 MB per second and for 5 seconds A may receive 5 MB >> of data, so after 5 seconds 999 requests will be sent to B. >> >> Is it right? >> >> > Why don't use incron or other inotify based tool to pre-fetch the > assets? There's also http://wiki.nginx.org/HttpProxyModule#proxy_store > which IMO seems more adequate to your setup. > > Other option is to use something like auth_request with a script or > the embedded Lua (http://wiki.nginx.org/HttpLuaModule) or Perl modules > (https://github.com/zzzcpan/nginx-perl) and do some scripting. > > --- appa > > _______________________________________________ > nginx-devel mailing list > nginx-devel at nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-devel > From toli at webforge.bg Thu Jan 12 12:50:18 2012 From: toli at webforge.bg (Anatoli Marinov) Date: Thu, 12 Jan 2012 14:50:18 +0200 Subject: proxy_cache In-Reply-To: <20120112123401.GB67687@mdounin.ru> References: <4F0EA8A4.1080405@webforge.bg> <9AEF8CC4-D17E-4738-81AB-79F156F7C0F3@nginx.com> <4F0EACA3.1050807@webforge.bg> <20120112123401.GB67687@mdounin.ru> Message-ID: <4F0ED70A.8070402@webforge.bg> Hello, See my answer below. On 01/12/2012 02:34 PM, Maxim Dounin wrote: > Hello! > > On Thu, Jan 12, 2012 at 11:49:23AM +0200, Anatoli Marinov wrote: > > >> I know this configuration variable. It has been added by Maxim last >> mouth in unstable (as i remembered but I am not absolutely sure). It >> seem to be a workaround and will not solve the problem. I think it >> is unusable. >> >> If we use it for the same case: >> In first 1 second A receives 1000 requests. Only 1 request will be >> send to B, for first request that A receives. The others 999 will >> wait for example 5 seconds. The link btw A and B is 1 MB per second >> and for 5 seconds A may receive 5 MB of data, so after 5 seconds 999 >> requests will be sent to B. >> >> Is it right? >> > Yes. The remaining questions are: are you serving "many big files ? > 1GB ? 2GB" over 1MB/s link? And 1000 simulteneous requests to the > same file are likely situation in your workload? If yes, you may > reconsider your network configuration. > The bandwidth between A and B is not important. If the link is 100 Mbps or even 1Gbps the issue will be hit again! Actually our links are bigger. I just wanted to illustrate the picture better. > You may also try to tune proxy_cache_lock_timeout (default is set > low enough to ensure minimal QoS impact), but it isn't likely to > help much in the particular situation described. > Yes. There is no value that may help me. > Ideally (for big files use case), we should be able to stream the > same response to all clients requesting the file (while > downloading it from upstream), but this isn't likely to happen > soon. > Yes! The only right solution could be streaming from temporary file. > In relatively near plans is to improve cache lock mechanism to > make it possible to switch off cache (and thus save some disk > resources) in case of lock timeout. > > Maxim Dounin > > >> >> On 01/12/2012 11:33 AM, Andrew Alexeev wrote: >> >>> Check this one, pls :) >>> http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_lock >>> >>> On Jan 12, 2012, at 1:32 PM, Anatoli Marinov wrote: >>> >>> >>>> Hello Colleagues, >>>> >>>> I found a performance issue with proxy_cache module. >>>> >>>> >>>> For example I have installed 2 servers with nginx-1.0.10. First >>>> one(A) works as a reverse proxy and the second one(B) is a >>>> storage with many big files ? 1GB ? 2GB. >>>> >>>> The link between A and B for example may serve 1 MBps. >>>> >>>> >>>> There is a new object on B and it is not yet cached on A. >>>> >>>> Let we assume this is a hot new object and A receives 1000 >>>> requests for 3 seconds for it. Because the object is not cached >>>> the requests will pass through upstream to B and incoming 1000 >>>> streams will be saved on A in tmp directory as a separate files. >>>> After every request has completed the files from tmp directory >>>> will be moved to cache directory. 1000 equal operations for one >>>> and the same object. In addition every object will be cached >>>> slow because there are 999 other streams. >>>> >>>> >>>> This 1 GB object will be downloaded 1000 times before it may be >>>> cached and this is not optimal at all. >>>> >>>> >>>> Am I missing something? It may be my configuration issue? >>>> >>>> Is there a solution for that? >>>> >>>> Cheers >>>> Anatoli Marinov >>>> >>>> _______________________________________________ >>>> nginx-devel mailing list >>>> nginx-devel at nginx.org >>>> http://mailman.nginx.org/mailman/listinfo/nginx-devel >>>> >>> >>> _______________________________________________ >>> nginx-devel mailing list >>> nginx-devel at nginx.org >>> http://mailman.nginx.org/mailman/listinfo/nginx-devel >>> >> > >> _______________________________________________ >> nginx-devel mailing list >> nginx-devel at nginx.org >> http://mailman.nginx.org/mailman/listinfo/nginx-devel >> > _______________________________________________ > nginx-devel mailing list > nginx-devel at nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-devel From zzz at zzz.org.ua Thu Jan 12 20:46:08 2012 From: zzz at zzz.org.ua (Alexandr Gomoliako) Date: Thu, 12 Jan 2012 22:46:08 +0200 Subject: typo in nginx-1.1.12/auto/lib/pcre/conf Message-ID: diff --git a/auto/lib/pcre/conf b/auto/lib/pcre/conf index e90d023..fd98ee9 100644 --- a/auto/lib/pcre/conf +++ b/auto/lib/pcre/conf @@ -165,7 +165,7 @@ else PCRE=YES fi - if [ $PCRE == YES ]; then + if [ $PCRE = YES ]; then ngx_feature="PCRE JIT support" ngx_feature_name="NGX_HAVE_PCRE_JIT" ngx_feature_test="int jit = 0; From ne at vbart.ru Thu Jan 12 23:09:54 2012 From: ne at vbart.ru (Valentin V. Bartenev) Date: Fri, 13 Jan 2012 03:09:54 +0400 Subject: typo in nginx-1.1.12/auto/lib/pcre/conf In-Reply-To: References: Message-ID: <201201130309.54560.ne@vbart.ru> On Friday 13 January 2012 00:46:08 Alexandr Gomoliako wrote: > diff --git a/auto/lib/pcre/conf b/auto/lib/pcre/conf > index e90d023..fd98ee9 100644 > --- a/auto/lib/pcre/conf > +++ b/auto/lib/pcre/conf > @@ -165,7 +165,7 @@ else > PCRE=YES > fi > > - if [ $PCRE == YES ]; then > + if [ $PCRE = YES ]; then > ngx_feature="PCRE JIT support" > ngx_feature_name="NGX_HAVE_PCRE_JIT" > ngx_feature_test="int jit = 0; > Already fixed in r4397. http://trac.nginx.org/nginx/changeset/4397/nginx wbr, Valentin V. Bartenev From toli at webforge.bg Fri Jan 13 12:44:37 2012 From: toli at webforge.bg (Anatoli Marinov) Date: Fri, 13 Jan 2012 14:44:37 +0200 Subject: proxy_cache In-Reply-To: <4F0ED70A.8070402@webforge.bg> References: <4F0EA8A4.1080405@webforge.bg> <9AEF8CC4-D17E-4738-81AB-79F156F7C0F3@nginx.com> <4F0EACA3.1050807@webforge.bg> <20120112123401.GB67687@mdounin.ru> <4F0ED70A.8070402@webforge.bg> Message-ID: <4F102735.9000008@webforge.bg> Hello, I am going to try to produce a solution for the issue I did post yesterday. It was about proxy_cache and 1000 requests for non-cached big object. There is suboptimal behavior and the object will be downloaded many times before been cached. So I need a direction. At the moment I am digging in the source..... Most of the the code which have a deal with caching is located in ngx_http_file_cache. If the object is not found in the cache it will be downloaded from upstream and the logic is implemented in ngx_event_pipe layer. As I understand it ngx_event_pipe provides functionality for asynchronous downloading from upstream and sending content to client. As a buffer there is used a file in tmp directory. When the file is fully downloaded from upstream then it is moved in cache directory. It is interesting when the file is in the tmp directory. There isn't any shared structures that keep a list of current simultaneous requests in upstream nor event_pipe. We may need a shared structure with current upstreams that write in temp file. For a new request if the object is not cached first we should check the list with current temp files. This list should be placed in shared memory because many workers have to use it. It the object is not cached but part of it exists in temp file it should be streamed from it (without event_pipe functionality?). So I am just sharing some ideas. Will be a good idea if the files in tmp directory have a hash for name like they have in cache directory? In this case we may don't need shared list with upstreams..... Do we need shared list with current upstreams which have pending download to tmp dir? Do we need shared list with event_pipe instances? All ideas are welcome!!! Anatoli Marinov On 01/12/2012 02:50 PM, Anatoli Marinov wrote: > Hello, > See my answer below. > > On 01/12/2012 02:34 PM, Maxim Dounin wrote: >> Hello! >> >> On Thu, Jan 12, 2012 at 11:49:23AM +0200, Anatoli Marinov wrote: >> >>> I know this configuration variable. It has been added by Maxim last >>> mouth in unstable (as i remembered but I am not absolutely sure). It >>> seem to be a workaround and will not solve the problem. I think it >>> is unusable. >>> >>> If we use it for the same case: >>> In first 1 second A receives 1000 requests. Only 1 request will be >>> send to B, for first request that A receives. The others 999 will >>> wait for example 5 seconds. The link btw A and B is 1 MB per second >>> and for 5 seconds A may receive 5 MB of data, so after 5 seconds 999 >>> requests will be sent to B. >>> >>> Is it right? >> Yes. The remaining questions are: are you serving "many big files ? >> 1GB ? 2GB" over 1MB/s link? And 1000 simulteneous requests to the >> same file are likely situation in your workload? If yes, you may >> reconsider your network configuration. > The bandwidth between A and B is not important. If the link is 100 > Mbps or even 1Gbps the issue will be hit again! Actually our links are > bigger. I just wanted to illustrate the picture better. >> You may also try to tune proxy_cache_lock_timeout (default is set >> low enough to ensure minimal QoS impact), but it isn't likely to >> help much in the particular situation described. > Yes. There is no value that may help me. > >> Ideally (for big files use case), we should be able to stream the >> same response to all clients requesting the file (while >> downloading it from upstream), but this isn't likely to happen >> soon. > Yes! The only right solution could be streaming from temporary file. >> In relatively near plans is to improve cache lock mechanism to >> make it possible to switch off cache (and thus save some disk >> resources) in case of lock timeout. >> >> Maxim Dounin >> >>> >>> On 01/12/2012 11:33 AM, Andrew Alexeev wrote: >>>> Check this one, pls :) >>>> http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_lock >>>> >>>> >>>> On Jan 12, 2012, at 1:32 PM, Anatoli Marinov wrote: >>>> >>>>> Hello Colleagues, >>>>> >>>>> I found a performance issue with proxy_cache module. >>>>> >>>>> >>>>> For example I have installed 2 servers with nginx-1.0.10. First >>>>> one(A) works as a reverse proxy and the second one(B) is a >>>>> storage with many big files ? 1GB ? 2GB. >>>>> >>>>> The link between A and B for example may serve 1 MBps. >>>>> >>>>> >>>>> There is a new object on B and it is not yet cached on A. >>>>> >>>>> Let we assume this is a hot new object and A receives 1000 >>>>> requests for 3 seconds for it. Because the object is not cached >>>>> the requests will pass through upstream to B and incoming 1000 >>>>> streams will be saved on A in tmp directory as a separate files. >>>>> After every request has completed the files from tmp directory >>>>> will be moved to cache directory. 1000 equal operations for one >>>>> and the same object. In addition every object will be cached >>>>> slow because there are 999 other streams. >>>>> >>>>> >>>>> This 1 GB object will be downloaded 1000 times before it may be >>>>> cached and this is not optimal at all. >>>>> >>>>> >>>>> Am I missing something? It may be my configuration issue? >>>>> >>>>> Is there a solution for that? >>>>> >>>>> Cheers >>>>> Anatoli Marinov >>>>> >>>>> _______________________________________________ >>>>> nginx-devel mailing list >>>>> nginx-devel at nginx.org >>>>> http://mailman.nginx.org/mailman/listinfo/nginx-devel >>>> >>>> _______________________________________________ >>>> nginx-devel mailing list >>>> nginx-devel at nginx.org >>>> http://mailman.nginx.org/mailman/listinfo/nginx-devel >>> _______________________________________________ >>> nginx-devel mailing list >>> nginx-devel at nginx.org >>> http://mailman.nginx.org/mailman/listinfo/nginx-devel >> _______________________________________________ >> nginx-devel mailing list >> nginx-devel at nginx.org >> http://mailman.nginx.org/mailman/listinfo/nginx-devel > > _______________________________________________ > nginx-devel mailing list > nginx-devel at nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-devel From mdounin at mdounin.ru Mon Jan 16 11:01:52 2012 From: mdounin at mdounin.ru (mdounin at mdounin.ru) Date: Mon, 16 Jan 2012 11:01:52 +0000 Subject: [nginx] svn commit: r4402 - trunk/src/http/modules Message-ID: <20120116110152.EF6593F9C32@mail.nginx.com> Author: mdounin Date: 2012-01-16 11:01:52 +0000 (Mon, 16 Jan 2012) New Revision: 4402 Log: Fixed proxy_cache_use_stale in "no live upstreams" case. Modified: trunk/src/http/modules/ngx_http_fastcgi_module.c trunk/src/http/modules/ngx_http_proxy_module.c trunk/src/http/modules/ngx_http_scgi_module.c trunk/src/http/modules/ngx_http_uwsgi_module.c Modified: trunk/src/http/modules/ngx_http_fastcgi_module.c =================================================================== --- trunk/src/http/modules/ngx_http_fastcgi_module.c 2012-01-11 11:15:00 UTC (rev 4401) +++ trunk/src/http/modules/ngx_http_fastcgi_module.c 2012-01-16 11:01:52 UTC (rev 4402) @@ -2314,6 +2314,10 @@ |NGX_HTTP_UPSTREAM_FT_OFF; } + if (conf->upstream.cache_use_stale & NGX_HTTP_UPSTREAM_FT_ERROR) { + conf->upstream.cache_use_stale |= NGX_HTTP_UPSTREAM_FT_NOLIVE; + } + if (conf->upstream.cache_methods == 0) { conf->upstream.cache_methods = prev->upstream.cache_methods; } Modified: trunk/src/http/modules/ngx_http_proxy_module.c =================================================================== --- trunk/src/http/modules/ngx_http_proxy_module.c 2012-01-11 11:15:00 UTC (rev 4401) +++ trunk/src/http/modules/ngx_http_proxy_module.c 2012-01-16 11:01:52 UTC (rev 4402) @@ -2685,17 +2685,21 @@ (NGX_CONF_BITMASK_SET |NGX_HTTP_UPSTREAM_FT_OFF)); + if (conf->upstream.cache_use_stale & NGX_HTTP_UPSTREAM_FT_OFF) { + conf->upstream.cache_use_stale = NGX_CONF_BITMASK_SET + |NGX_HTTP_UPSTREAM_FT_OFF; + } + + if (conf->upstream.cache_use_stale & NGX_HTTP_UPSTREAM_FT_ERROR) { + conf->upstream.cache_use_stale |= NGX_HTTP_UPSTREAM_FT_NOLIVE; + } + if (conf->upstream.cache_methods == 0) { conf->upstream.cache_methods = prev->upstream.cache_methods; } conf->upstream.cache_methods |= NGX_HTTP_GET|NGX_HTTP_HEAD; - if (conf->upstream.cache_use_stale & NGX_HTTP_UPSTREAM_FT_OFF) { - conf->upstream.cache_use_stale = NGX_CONF_BITMASK_SET - |NGX_HTTP_UPSTREAM_FT_OFF; - } - ngx_conf_merge_ptr_value(conf->upstream.cache_bypass, prev->upstream.cache_bypass, NULL); Modified: trunk/src/http/modules/ngx_http_scgi_module.c =================================================================== --- trunk/src/http/modules/ngx_http_scgi_module.c 2012-01-11 11:15:00 UTC (rev 4401) +++ trunk/src/http/modules/ngx_http_scgi_module.c 2012-01-16 11:01:52 UTC (rev 4402) @@ -1286,6 +1286,10 @@ |NGX_HTTP_UPSTREAM_FT_OFF; } + if (conf->upstream.cache_use_stale & NGX_HTTP_UPSTREAM_FT_ERROR) { + conf->upstream.cache_use_stale |= NGX_HTTP_UPSTREAM_FT_NOLIVE; + } + if (conf->upstream.cache_methods == 0) { conf->upstream.cache_methods = prev->upstream.cache_methods; } Modified: trunk/src/http/modules/ngx_http_uwsgi_module.c =================================================================== --- trunk/src/http/modules/ngx_http_uwsgi_module.c 2012-01-11 11:15:00 UTC (rev 4401) +++ trunk/src/http/modules/ngx_http_uwsgi_module.c 2012-01-16 11:01:52 UTC (rev 4402) @@ -1338,6 +1338,10 @@ |NGX_HTTP_UPSTREAM_FT_OFF; } + if (conf->upstream.cache_use_stale & NGX_HTTP_UPSTREAM_FT_ERROR) { + conf->upstream.cache_use_stale |= NGX_HTTP_UPSTREAM_FT_NOLIVE; + } + if (conf->upstream.cache_methods == 0) { conf->upstream.cache_methods = prev->upstream.cache_methods; } From mdounin at mdounin.ru Mon Jan 16 11:03:28 2012 From: mdounin at mdounin.ru (mdounin at mdounin.ru) Date: Mon, 16 Jan 2012 11:03:28 +0000 Subject: [nginx] svn commit: r4403 - trunk/src/http/modules Message-ID: <20120116110328.18BA83F9C24@mail.nginx.com> Author: mdounin Date: 2012-01-16 11:03:27 +0000 (Mon, 16 Jan 2012) New Revision: 4403 Log: Fixed handling of mp4 above 2G and 32bit offsets (ticket #84). Modified: trunk/src/http/modules/ngx_http_mp4_module.c Modified: trunk/src/http/modules/ngx_http_mp4_module.c =================================================================== --- trunk/src/http/modules/ngx_http_mp4_module.c 2012-01-16 11:01:52 UTC (rev 4402) +++ trunk/src/http/modules/ngx_http_mp4_module.c 2012-01-16 11:03:27 UTC (rev 4403) @@ -165,10 +165,10 @@ ((u_char *) (p))[7] = n4 #define ngx_mp4_get_32value(p) \ - ( (((u_char *) (p))[0] << 24) \ - + (((u_char *) (p))[1] << 16) \ - + (((u_char *) (p))[2] << 8) \ - + (((u_char *) (p))[3]) ) + ( ((uint32_t) ((u_char *) (p))[0] << 24) \ + + ( ((u_char *) (p))[1] << 16) \ + + ( ((u_char *) (p))[2] << 8) \ + + ( ((u_char *) (p))[3]) ) #define ngx_mp4_set_32value(p, n) \ ((u_char *) (p))[0] = (u_char) ((n) >> 24); \ From mdounin at mdounin.ru Mon Jan 16 11:13:48 2012 From: mdounin at mdounin.ru (mdounin at mdounin.ru) Date: Mon, 16 Jan 2012 11:13:48 +0000 Subject: [nginx] svn commit: r4404 - trunk/src/os/unix Message-ID: <20120116111348.DED4E3F9C1E@mail.nginx.com> Author: mdounin Date: 2012-01-16 11:13:48 +0000 (Mon, 16 Jan 2012) New Revision: 4404 Log: Fixed sched_setaffinity(2) to correctly pass size. Second argument (cpusetsize) is size in bytes, not in bits. Previously used constant 32 resulted in reading of uninitialized memory and caused EINVAL to be returned on some Linux kernels. Modified: trunk/src/os/unix/ngx_process_cycle.c Modified: trunk/src/os/unix/ngx_process_cycle.c =================================================================== --- trunk/src/os/unix/ngx_process_cycle.c 2012-01-16 11:03:27 UTC (rev 4403) +++ trunk/src/os/unix/ngx_process_cycle.c 2012-01-16 11:13:48 UTC (rev 4404) @@ -914,7 +914,10 @@ ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "sched_setaffinity(0x%08Xl)", cpu_affinity); - if (sched_setaffinity(0, 32, (cpu_set_t *) &cpu_affinity) == -1) { + if (sched_setaffinity(0, sizeof(cpu_affinity), + (cpu_set_t *) &cpu_affinity) + == -1) + { ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, "sched_setaffinity(0x%08Xl) failed", cpu_affinity); } From vbart at nginx.com Mon Jan 16 12:42:07 2012 From: vbart at nginx.com (vbart at nginx.com) Date: Mon, 16 Jan 2012 12:42:07 +0000 Subject: [nginx] svn commit: r4405 - trunk/src/core Message-ID: Author: vbart Date: 2012-01-16 12:42:07 +0000 (Mon, 16 Jan 2012) New Revision: 4405 Modified: trunk/src/core/ngx_hash.c Log: Fixed devision by zero exception in ngx_hash_init(). The ngx_hash_init() function did not expect call with zero elements count, which caused FPE error on configs with an empty "types" block in http context and "types_hash_max_size" > 10000. Example configuration to reproduce: events { } http { types_hash_max_size 10001; types {} server {} } Modified: trunk/src/core/ngx_hash.c =================================================================== --- trunk/src/core/ngx_hash.c 2012-01-16 11:13:48 UTC (rev 4404) +++ trunk/src/core/ngx_hash.c 2012-01-16 12:42:07 UTC (rev 4405) @@ -277,7 +277,7 @@ start = nelts / (bucket_size / (2 * sizeof(void *))); start = start ? start : 1; - if (hinit->max_size > 10000 && hinit->max_size / nelts < 100) { + if (hinit->max_size > 10000 && nelts && hinit->max_size / nelts < 100) { start = hinit->max_size - 1000; } From igor at sysoev.ru Mon Jan 16 14:31:15 2012 From: igor at sysoev.ru (igor at sysoev.ru) Date: Mon, 16 Jan 2012 14:31:15 +0000 Subject: [nginx] svn commit: r4406 - trunk/docs/text Message-ID: Author: is Date: 2012-01-16 14:31:15 +0000 (Mon, 16 Jan 2012) New Revision: 4406 Modified: trunk/docs/text/LICENSE Log: 2012 year. Modified: trunk/docs/text/LICENSE =================================================================== --- trunk/docs/text/LICENSE 2012-01-16 12:42:07 UTC (rev 4405) +++ trunk/docs/text/LICENSE 2012-01-16 14:31:15 UTC (rev 4406) @@ -1,5 +1,5 @@ /* - * Copyright (C) 2002-2011 Igor Sysoev + * Copyright (C) 2002-2012 Igor Sysoev * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions From mdounin at mdounin.ru Mon Jan 16 15:10:37 2012 From: mdounin at mdounin.ru (mdounin at mdounin.ru) Date: Mon, 16 Jan 2012 15:10:37 +0000 Subject: [nginx] svn commit: r4407 - trunk/misc Message-ID: <20120116151037.352D83F9C1E@mail.nginx.com> Author: mdounin Date: 2012-01-16 15:10:36 +0000 (Mon, 16 Jan 2012) New Revision: 4407 Log: Updated OpenSSL version used for win32 build. Modified: trunk/misc/GNUmakefile Modified: trunk/misc/GNUmakefile =================================================================== --- trunk/misc/GNUmakefile 2012-01-16 14:31:15 UTC (rev 4406) +++ trunk/misc/GNUmakefile 2012-01-16 15:10:36 UTC (rev 4407) @@ -6,7 +6,7 @@ REPO = $(shell svn info | sed -n 's/^Repository Root: //p') OBJS = objs.msvc8 -OPENSSL = openssl-1.0.0e +OPENSSL = openssl-1.0.0f ZLIB = zlib-1.2.5 PCRE = pcre-8.12 From mdounin at mdounin.ru Mon Jan 16 15:14:37 2012 From: mdounin at mdounin.ru (mdounin at mdounin.ru) Date: Mon, 16 Jan 2012 15:14:37 +0000 Subject: [nginx] svn commit: r4408 - trunk/docs/xml/nginx Message-ID: <20120116151437.ECE8F3F9C1D@mail.nginx.com> Author: mdounin Date: 2012-01-16 15:14:37 +0000 (Mon, 16 Jan 2012) New Revision: 4408 Log: nginx-1.1.13-RELEASE Modified: trunk/docs/xml/nginx/changes.xml Modified: trunk/docs/xml/nginx/changes.xml =================================================================== --- trunk/docs/xml/nginx/changes.xml 2012-01-16 15:10:36 UTC (rev 4407) +++ trunk/docs/xml/nginx/changes.xml 2012-01-16 15:14:37 UTC (rev 4408) @@ -9,6 +9,82 @@ nginx changelog + + + + +????????? TLSv1.1 ? TLSv1.2 ? ????????? ssl_protocols. + + +the "TLSv1.1" and "TLSv1.2" parameters of the "ssl_protocols" directive. + + + + + +????????? ????????? limit_req ????????????? ???????????; +?????? ????????? ? 1.1.12. + + +the "limit_req" directive parameters were not inherited correctly; +the bug had appeared in 1.1.12. + + + + + +????????? proxy_redirect ??????????? ???????????? ???????? Refresh +??? ????????????? ?????????? ?????????. + + +the "proxy_redirect" directive incorrectly processed "Refresh" header +if regular expression were used. + + + + + +????????? proxy_cache_use_stale ? ?????????? error ?? ?????????? ????? ?? +????, ???? ??? ??????? ???? ???????? ?????????????. + + +the "proxy_cache_use_stale" directive with "error" parameter did not return +answer from cache if there were no live upstreams. + + + + + +????????? worker_cpu_affinity ????? ?? ????????. + + +the "worker_cpu_affinity" directive might not work. + + + + + +nginx ?? ????????? ?? Solaris; +?????? ????????? ? 1.1.12. + + +nginx could not be built on Solaris; +the bug had appeared in 1.1.12. + + + + + +? ?????? ngx_http_mp4_module. + + +in the ngx_http_mp4_module. + + + + + + From mdounin at mdounin.ru Mon Jan 16 15:15:01 2012 From: mdounin at mdounin.ru (mdounin at mdounin.ru) Date: Mon, 16 Jan 2012 15:15:01 +0000 Subject: [nginx] svn commit: r4409 - tags Message-ID: <20120116151501.4AFB23F9CE8@mail.nginx.com> Author: mdounin Date: 2012-01-16 15:15:01 +0000 (Mon, 16 Jan 2012) New Revision: 4409 Log: release-1.1.13 tag Added: tags/release-1.1.13/ From adelino at ainou.net Mon Jan 16 19:25:52 2012 From: adelino at ainou.net (Adelino Monteiro) Date: Mon, 16 Jan 2012 19:25:52 +0000 Subject: Event timer Message-ID: Hello, Could someone explain me why my nginx configuration has a delay when sending file (from 19:07:39 to 19:09:59) This same configuration used to work in my development environment but in our staging server it has this behaviour. The one thing that is different is that this last one is build on SAN storage with RAID 5 but Linux sees it as an /dev/sdx partition. 2012/01/16 19:07:39 [debug] 4799#0: *3 http write filter 0000000001340500 2012/01/16 19:07:39 [debug] 4799#0: *3 http copy filter: -2 "/local/NOAJR0600020_H.ogg?" 2012/01/16 19:07:39 [debug] 4799#0: *3 http writer output filter: -2, "/local/NOAJR0600020_H.ogg?" 2012/01/16 19:07:39 [debug] 4799#0: *3 event timer: 24, old: 1326740919650, new: 1326740919946 2012/01/16 19:07:59 [debug] 4799#0: *3 post event 00000000013C6328 2012/01/16 19:07:59 [debug] 4799#0: *3 delete posted event 00000000013C6328 2012/01/16 19:07:59 [debug] 4799#0: *3 http run request: "/local/NOAJR0600020_H.ogg?" 2012/01/16 19:07:59 [debug] 4799#0: *3 http writer handler: "/local/NOAJR0600020_H.ogg?" 2012/01/16 19:07:59 [debug] 4799#0: *3 http output filter "/local/NOAJR0600020_H.ogg?" 2012/01/16 19:07:59 [debug] 4799#0: *3 http copy filter: "/local/NOAJR0600020_H.ogg?" 2012/01/16 19:07:59 [debug] 4799#0: *3 http postpone filter "/local/NOAJR0600020_H.ogg?" 0000000000000000 Any help would be greatly appreciated. Thanks AM. -------------- next part -------------- An HTML attachment was scrubbed... URL: From mdounin at mdounin.ru Mon Jan 16 21:10:24 2012 From: mdounin at mdounin.ru (Maxim Dounin) Date: Tue, 17 Jan 2012 01:10:24 +0400 Subject: Event timer In-Reply-To: References: Message-ID: <20120116211024.GG67687@mdounin.ru> Hello! On Mon, Jan 16, 2012 at 07:25:52PM +0000, Adelino Monteiro wrote: > Hello, > > Could someone explain me why my nginx configuration has a delay when > sending file (from 19:07:39 to 19:09:59) > This same configuration used to work in my development environment but in > our staging server it has this behaviour. > The one thing that is different is that this last one is build on SAN > storage with RAID 5 but Linux sees it as an /dev/sdx partition. > > 2012/01/16 19:07:39 [debug] 4799#0: *3 http write filter 0000000001340500 > 2012/01/16 19:07:39 [debug] 4799#0: *3 http copy filter: -2 > "/local/NOAJR0600020_H.ogg?" > 2012/01/16 19:07:39 [debug] 4799#0: *3 http writer output filter: -2, > "/local/NOAJR0600020_H.ogg?" > 2012/01/16 19:07:39 [debug] 4799#0: *3 event timer: 24, old: 1326740919650, > new: 1326740919946 > 2012/01/16 19:07:59 [debug] 4799#0: *3 post event 00000000013C6328 > 2012/01/16 19:07:59 [debug] 4799#0: *3 delete posted event 00000000013C6328 > 2012/01/16 19:07:59 [debug] 4799#0: *3 http run request: > "/local/NOAJR0600020_H.ogg?" > 2012/01/16 19:07:59 [debug] 4799#0: *3 http writer handler: > "/local/NOAJR0600020_H.ogg?" > 2012/01/16 19:07:59 [debug] 4799#0: *3 http output filter > "/local/NOAJR0600020_H.ogg?" > 2012/01/16 19:07:59 [debug] 4799#0: *3 http copy filter: > "/local/NOAJR0600020_H.ogg?" > 2012/01/16 19:07:59 [debug] 4799#0: *3 http postpone filter > "/local/NOAJR0600020_H.ogg?" 0000000000000000 > > Any help would be greatly appreciated. It's hardly possible to tell anything from the above log snippet, as it basically doesn't contain any information related to file I/O calls and/or event processing. You have to examine global logs to be able to view event processing logs, and at least one full event loop iteration is required to be able to tell something. Maxim Dounin From ru at nginx.com Tue Jan 17 07:09:52 2012 From: ru at nginx.com (ru at nginx.com) Date: Tue, 17 Jan 2012 07:09:52 +0000 Subject: [nginx] svn commit: r4410 - trunk/docs/xml/nginx Message-ID: <20120117070952.3782A3F9C24@mail.nginx.com> Author: ru Date: 2012-01-17 07:09:51 +0000 (Tue, 17 Jan 2012) New Revision: 4410 Log: Fixed spelling. Modified: trunk/docs/xml/nginx/changes.xml Modified: trunk/docs/xml/nginx/changes.xml =================================================================== --- trunk/docs/xml/nginx/changes.xml 2012-01-16 15:15:01 UTC (rev 4409) +++ trunk/docs/xml/nginx/changes.xml 2012-01-17 07:09:51 UTC (rev 4410) @@ -33,7 +33,7 @@ -????????? proxy_redirect ??????????? ???????????? ???????? Refresh +????????? proxy_redirect ??????????? ???????????? ????????? Refresh ??? ????????????? ?????????? ?????????. @@ -45,7 +45,7 @@ ????????? proxy_cache_use_stale ? ?????????? error ?? ?????????? ????? ?? -????, ???? ??? ??????? ???? ???????? ?????????????. +????, ???? ??? ??????? ???? ???????? ?????????????. the "proxy_cache_use_stale" directive with "error" parameter did not return From adelino at ainou.net Tue Jan 17 10:01:40 2012 From: adelino at ainou.net (Adelino Monteiro) Date: Tue, 17 Jan 2012 10:01:40 +0000 Subject: Event timer In-Reply-To: <20120116211024.GG67687@mdounin.ru> References: <20120116211024.GG67687@mdounin.ru> Message-ID: As it turns out the fault was on the client side (as always ;-)) Testing the request with a simple wget url proved that nginx was in fact returned the data as requested by the client. Thanks for your help nevertheless On 16 January 2012 21:10, Maxim Dounin wrote: > Hello! > > On Mon, Jan 16, 2012 at 07:25:52PM +0000, Adelino Monteiro wrote: > > > Hello, > > > > Could someone explain me why my nginx configuration has a delay when > > sending file (from 19:07:39 to 19:09:59) > > This same configuration used to work in my development environment but in > > our staging server it has this behaviour. > > The one thing that is different is that this last one is build on SAN > > storage with RAID 5 but Linux sees it as an /dev/sdx partition. > > > > 2012/01/16 19:07:39 [debug] 4799#0: *3 http write filter 0000000001340500 > > 2012/01/16 19:07:39 [debug] 4799#0: *3 http copy filter: -2 > > "/local/NOAJR0600020_H.ogg?" > > 2012/01/16 19:07:39 [debug] 4799#0: *3 http writer output filter: -2, > > "/local/NOAJR0600020_H.ogg?" > > 2012/01/16 19:07:39 [debug] 4799#0: *3 event timer: 24, old: > 1326740919650, > > new: 1326740919946 > > 2012/01/16 19:07:59 [debug] 4799#0: *3 post event 00000000013C6328 > > 2012/01/16 19:07:59 [debug] 4799#0: *3 delete posted event > 00000000013C6328 > > 2012/01/16 19:07:59 [debug] 4799#0: *3 http run request: > > "/local/NOAJR0600020_H.ogg?" > > 2012/01/16 19:07:59 [debug] 4799#0: *3 http writer handler: > > "/local/NOAJR0600020_H.ogg?" > > 2012/01/16 19:07:59 [debug] 4799#0: *3 http output filter > > "/local/NOAJR0600020_H.ogg?" > > 2012/01/16 19:07:59 [debug] 4799#0: *3 http copy filter: > > "/local/NOAJR0600020_H.ogg?" > > 2012/01/16 19:07:59 [debug] 4799#0: *3 http postpone filter > > "/local/NOAJR0600020_H.ogg?" 0000000000000000 > > > > Any help would be greatly appreciated. > > It's hardly possible to tell anything from the above log snippet, > as it basically doesn't contain any information related to file > I/O calls and/or event processing. You have to examine global > logs to be able to view event processing logs, and at least one > full event loop iteration is required to be able to tell > something. > > Maxim Dounin > > _______________________________________________ > nginx-devel mailing list > nginx-devel at nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-devel > -------------- next part -------------- An HTML attachment was scrubbed... URL: From alex at alexchamberlain.co.uk Tue Jan 17 13:49:13 2012 From: alex at alexchamberlain.co.uk (Alex Chamberlain) Date: Tue, 17 Jan 2012 13:49:13 +0000 Subject: URL Decoding problems Message-ID: Hi all, I've got a content handler that accesses request->uri. However, if the uri includes encoded forward slashes, these are collapsed into a single forward slash. Is this correct behaviour? I can understand collapsing multiple, unencoded slashes, but not encoded ones. (Very bad, first version) code is at https://github.com/alexchamberlain/nginx-qrcode. An example would be http://localhost/qr/http%3A%2F%2F%2Fwww.alexchamberlain.co.uk Any help greatly appreciated. Alex From mdounin at mdounin.ru Tue Jan 17 15:50:38 2012 From: mdounin at mdounin.ru (Maxim Dounin) Date: Tue, 17 Jan 2012 19:50:38 +0400 Subject: URL Decoding problems In-Reply-To: References: Message-ID: <20120117155038.GQ67687@mdounin.ru> Hello! On Tue, Jan 17, 2012 at 01:49:13PM +0000, Alex Chamberlain wrote: > Hi all, > > I've got a content handler that accesses request->uri. However, if the > uri includes encoded forward slashes, these are collapsed into a > single forward slash. Is this correct behaviour? I can understand > collapsing multiple, unencoded slashes, but not encoded ones. > > (Very bad, first version) code is at > https://github.com/alexchamberlain/nginx-qrcode. > > An example would be > http://localhost/qr/http%3A%2F%2F%2Fwww.alexchamberlain.co.uk > > Any help greatly appreciated. Right now nginx decodes URI to be able to work with it, in particular - map it to a file system. Decoding of the "/" is most questionable part of the process, but it's how it works now. If you need original uri as provided by client - the one is available via r->unparsed_uri. Maxim Dounin From maxim at nginx.com Wed Jan 18 14:33:18 2012 From: maxim at nginx.com (maxim at nginx.com) Date: Wed, 18 Jan 2012 14:33:18 +0000 Subject: [nginx] svn commit: r4411 - trunk/src/core Message-ID: <20120118143318.359063F9C68@mail.nginx.com> Author: maxim Date: 2012-01-18 14:33:17 +0000 (Wed, 18 Jan 2012) New Revision: 4411 Log: Version bump. Modified: trunk/src/core/nginx.h Modified: trunk/src/core/nginx.h =================================================================== --- trunk/src/core/nginx.h 2012-01-17 07:09:51 UTC (rev 4410) +++ trunk/src/core/nginx.h 2012-01-18 14:33:17 UTC (rev 4411) @@ -8,8 +8,8 @@ #define _NGINX_H_INCLUDED_ -#define nginx_version 1001013 -#define NGINX_VERSION "1.1.13" +#define nginx_version 1001014 +#define NGINX_VERSION "1.1.14" #define NGINX_VER "nginx/" NGINX_VERSION #define NGINX_VAR "NGINX" From maxim at nginx.com Wed Jan 18 15:04:17 2012 From: maxim at nginx.com (maxim at nginx.com) Date: Wed, 18 Jan 2012 15:04:17 +0000 Subject: [nginx] svn commit: r4412 - trunk/src/http/modules/perl Message-ID: <20120118150417.59EE23F9C24@mail.nginx.com> Author: maxim Date: 2012-01-18 15:04:17 +0000 (Wed, 18 Jan 2012) New Revision: 4412 Log: Version bump. Modified: trunk/src/http/modules/perl/nginx.pm Modified: trunk/src/http/modules/perl/nginx.pm =================================================================== --- trunk/src/http/modules/perl/nginx.pm 2012-01-18 14:33:17 UTC (rev 4411) +++ trunk/src/http/modules/perl/nginx.pm 2012-01-18 15:04:17 UTC (rev 4412) @@ -48,7 +48,7 @@ HTTP_INSUFFICIENT_STORAGE ); -our $VERSION = '1.1.13'; +our $VERSION = '1.1.14'; require XSLoader; XSLoader::load('nginx', $VERSION); @@ -128,6 +128,7 @@ =head1 COPYRIGHT AND LICENSE Copyright (C) Igor Sysoev +Copyright (C) Nginx, Inc. =cut From maxim at nginx.com Wed Jan 18 15:07:45 2012 From: maxim at nginx.com (maxim at nginx.com) Date: Wed, 18 Jan 2012 15:07:45 +0000 Subject: [nginx] svn commit: r4413 - in trunk: auto auto/cc auto/lib auto/lib/geoip auto/lib/google-perftools auto/lib/libatomic auto/lib/libgd auto/lib/libxslt auto/lib/md5 auto/lib/openssl auto/lib/pcre auto/lib/perl auto/lib/sha1 auto/lib/zlib auto/os auto/types docs/man docs/text src/core src/event src/event/modules src/http src/http/modules src/http/modules/perl src/mail src/misc src/mysql src/os/unix src/os/win32 Message-ID: <20120118150747.209153F9C56@mail.nginx.com> Author: maxim Date: 2012-01-18 15:07:43 +0000 (Wed, 18 Jan 2012) New Revision: 4413 Log: Copyright updated. Modified: trunk/auto/cc/acc trunk/auto/cc/bcc trunk/auto/cc/ccc trunk/auto/cc/conf trunk/auto/cc/gcc trunk/auto/cc/icc trunk/auto/cc/msvc trunk/auto/cc/name trunk/auto/cc/owc trunk/auto/cc/sunc trunk/auto/configure trunk/auto/define trunk/auto/endianess trunk/auto/feature trunk/auto/have trunk/auto/have_headers trunk/auto/headers trunk/auto/include trunk/auto/init trunk/auto/install trunk/auto/lib/conf trunk/auto/lib/geoip/conf trunk/auto/lib/google-perftools/conf trunk/auto/lib/libatomic/conf trunk/auto/lib/libatomic/make trunk/auto/lib/libgd/conf trunk/auto/lib/libxslt/conf trunk/auto/lib/make trunk/auto/lib/md5/conf trunk/auto/lib/md5/make trunk/auto/lib/md5/makefile.bcc trunk/auto/lib/md5/makefile.msvc trunk/auto/lib/md5/makefile.owc trunk/auto/lib/openssl/conf trunk/auto/lib/openssl/make trunk/auto/lib/openssl/makefile.bcc trunk/auto/lib/openssl/makefile.msvc trunk/auto/lib/pcre/conf trunk/auto/lib/pcre/make trunk/auto/lib/pcre/makefile.bcc trunk/auto/lib/pcre/makefile.msvc trunk/auto/lib/pcre/makefile.owc trunk/auto/lib/perl/conf trunk/auto/lib/perl/make trunk/auto/lib/sha1/conf trunk/auto/lib/sha1/make trunk/auto/lib/sha1/makefile.bcc trunk/auto/lib/sha1/makefile.msvc trunk/auto/lib/sha1/makefile.owc trunk/auto/lib/test trunk/auto/lib/zlib/conf trunk/auto/lib/zlib/make trunk/auto/lib/zlib/makefile.bcc trunk/auto/lib/zlib/makefile.msvc trunk/auto/lib/zlib/makefile.owc trunk/auto/make trunk/auto/modules trunk/auto/nohave trunk/auto/options trunk/auto/os/conf trunk/auto/os/darwin trunk/auto/os/freebsd trunk/auto/os/linux trunk/auto/os/solaris trunk/auto/os/win32 trunk/auto/sources trunk/auto/stubs trunk/auto/summary trunk/auto/types/sizeof trunk/auto/types/typedef trunk/auto/types/uintptr_t trunk/auto/types/value trunk/auto/unix trunk/docs/man/nginx.8 trunk/docs/text/LICENSE trunk/src/core/nginx.c trunk/src/core/nginx.h trunk/src/core/ngx_array.c trunk/src/core/ngx_array.h trunk/src/core/ngx_buf.c trunk/src/core/ngx_buf.h trunk/src/core/ngx_conf_file.c trunk/src/core/ngx_conf_file.h trunk/src/core/ngx_config.h trunk/src/core/ngx_connection.c trunk/src/core/ngx_connection.h trunk/src/core/ngx_core.h trunk/src/core/ngx_cpuinfo.c trunk/src/core/ngx_crc.h trunk/src/core/ngx_crc32.c trunk/src/core/ngx_crc32.h trunk/src/core/ngx_crypt.h trunk/src/core/ngx_cycle.c trunk/src/core/ngx_cycle.h trunk/src/core/ngx_file.c trunk/src/core/ngx_file.h trunk/src/core/ngx_hash.c trunk/src/core/ngx_hash.h trunk/src/core/ngx_inet.c trunk/src/core/ngx_inet.h trunk/src/core/ngx_list.c trunk/src/core/ngx_list.h trunk/src/core/ngx_log.c trunk/src/core/ngx_log.h trunk/src/core/ngx_md5.h trunk/src/core/ngx_murmurhash.h trunk/src/core/ngx_open_file_cache.c trunk/src/core/ngx_open_file_cache.h trunk/src/core/ngx_output_chain.c trunk/src/core/ngx_palloc.c trunk/src/core/ngx_palloc.h trunk/src/core/ngx_parse.c trunk/src/core/ngx_parse.h trunk/src/core/ngx_queue.c trunk/src/core/ngx_queue.h trunk/src/core/ngx_radix_tree.c trunk/src/core/ngx_radix_tree.h trunk/src/core/ngx_rbtree.c trunk/src/core/ngx_rbtree.h trunk/src/core/ngx_regex.c trunk/src/core/ngx_regex.h trunk/src/core/ngx_resolver.c trunk/src/core/ngx_resolver.h trunk/src/core/ngx_sha1.h trunk/src/core/ngx_shmtx.c trunk/src/core/ngx_shmtx.h trunk/src/core/ngx_slab.c trunk/src/core/ngx_slab.h trunk/src/core/ngx_spinlock.c trunk/src/core/ngx_string.c trunk/src/core/ngx_string.h trunk/src/core/ngx_times.c trunk/src/core/ngx_times.h trunk/src/event/modules/ngx_aio_module.c trunk/src/event/modules/ngx_devpoll_module.c trunk/src/event/modules/ngx_epoll_module.c trunk/src/event/modules/ngx_eventport_module.c trunk/src/event/modules/ngx_iocp_module.c trunk/src/event/modules/ngx_iocp_module.h trunk/src/event/modules/ngx_kqueue_module.c trunk/src/event/modules/ngx_poll_module.c trunk/src/event/modules/ngx_rtsig_module.c trunk/src/event/modules/ngx_select_module.c trunk/src/event/modules/ngx_win32_select_module.c trunk/src/event/ngx_event.c trunk/src/event/ngx_event.h trunk/src/event/ngx_event_accept.c trunk/src/event/ngx_event_acceptex.c trunk/src/event/ngx_event_busy_lock.c trunk/src/event/ngx_event_busy_lock.h trunk/src/event/ngx_event_connect.c trunk/src/event/ngx_event_connect.h trunk/src/event/ngx_event_connectex.c trunk/src/event/ngx_event_mutex.c trunk/src/event/ngx_event_openssl.c trunk/src/event/ngx_event_openssl.h trunk/src/event/ngx_event_pipe.c trunk/src/event/ngx_event_pipe.h trunk/src/event/ngx_event_posted.c trunk/src/event/ngx_event_posted.h trunk/src/event/ngx_event_timer.c trunk/src/event/ngx_event_timer.h trunk/src/http/modules/ngx_http_access_module.c trunk/src/http/modules/ngx_http_addition_filter_module.c trunk/src/http/modules/ngx_http_auth_basic_module.c trunk/src/http/modules/ngx_http_autoindex_module.c trunk/src/http/modules/ngx_http_browser_module.c trunk/src/http/modules/ngx_http_charset_filter_module.c trunk/src/http/modules/ngx_http_chunked_filter_module.c trunk/src/http/modules/ngx_http_dav_module.c trunk/src/http/modules/ngx_http_degradation_module.c trunk/src/http/modules/ngx_http_empty_gif_module.c trunk/src/http/modules/ngx_http_fastcgi_module.c trunk/src/http/modules/ngx_http_flv_module.c trunk/src/http/modules/ngx_http_geo_module.c trunk/src/http/modules/ngx_http_geoip_module.c trunk/src/http/modules/ngx_http_gzip_filter_module.c trunk/src/http/modules/ngx_http_gzip_static_module.c trunk/src/http/modules/ngx_http_headers_filter_module.c trunk/src/http/modules/ngx_http_image_filter_module.c trunk/src/http/modules/ngx_http_index_module.c trunk/src/http/modules/ngx_http_limit_conn_module.c trunk/src/http/modules/ngx_http_limit_req_module.c trunk/src/http/modules/ngx_http_log_module.c trunk/src/http/modules/ngx_http_map_module.c trunk/src/http/modules/ngx_http_memcached_module.c trunk/src/http/modules/ngx_http_mp4_module.c trunk/src/http/modules/ngx_http_not_modified_filter_module.c trunk/src/http/modules/ngx_http_proxy_module.c trunk/src/http/modules/ngx_http_random_index_module.c trunk/src/http/modules/ngx_http_range_filter_module.c trunk/src/http/modules/ngx_http_realip_module.c trunk/src/http/modules/ngx_http_referer_module.c trunk/src/http/modules/ngx_http_rewrite_module.c trunk/src/http/modules/ngx_http_scgi_module.c trunk/src/http/modules/ngx_http_secure_link_module.c trunk/src/http/modules/ngx_http_split_clients_module.c trunk/src/http/modules/ngx_http_ssi_filter_module.c trunk/src/http/modules/ngx_http_ssi_filter_module.h trunk/src/http/modules/ngx_http_ssl_module.c trunk/src/http/modules/ngx_http_ssl_module.h trunk/src/http/modules/ngx_http_static_module.c trunk/src/http/modules/ngx_http_stub_status_module.c trunk/src/http/modules/ngx_http_sub_filter_module.c trunk/src/http/modules/ngx_http_upstream_ip_hash_module.c trunk/src/http/modules/ngx_http_upstream_keepalive_module.c trunk/src/http/modules/ngx_http_userid_filter_module.c trunk/src/http/modules/ngx_http_uwsgi_module.c trunk/src/http/modules/ngx_http_xslt_filter_module.c trunk/src/http/modules/perl/Makefile.PL trunk/src/http/modules/perl/nginx.xs trunk/src/http/modules/perl/ngx_http_perl_module.c trunk/src/http/modules/perl/ngx_http_perl_module.h trunk/src/http/ngx_http.c trunk/src/http/ngx_http.h trunk/src/http/ngx_http_busy_lock.c trunk/src/http/ngx_http_busy_lock.h trunk/src/http/ngx_http_cache.h trunk/src/http/ngx_http_config.h trunk/src/http/ngx_http_copy_filter_module.c trunk/src/http/ngx_http_core_module.c trunk/src/http/ngx_http_core_module.h trunk/src/http/ngx_http_file_cache.c trunk/src/http/ngx_http_header_filter_module.c trunk/src/http/ngx_http_parse.c trunk/src/http/ngx_http_parse_time.c trunk/src/http/ngx_http_postpone_filter_module.c trunk/src/http/ngx_http_request.c trunk/src/http/ngx_http_request.h trunk/src/http/ngx_http_request_body.c trunk/src/http/ngx_http_script.c trunk/src/http/ngx_http_script.h trunk/src/http/ngx_http_special_response.c trunk/src/http/ngx_http_upstream.c trunk/src/http/ngx_http_upstream.h trunk/src/http/ngx_http_upstream_round_robin.c trunk/src/http/ngx_http_upstream_round_robin.h trunk/src/http/ngx_http_variables.c trunk/src/http/ngx_http_variables.h trunk/src/http/ngx_http_write_filter_module.c trunk/src/mail/ngx_mail.c trunk/src/mail/ngx_mail.h trunk/src/mail/ngx_mail_auth_http_module.c trunk/src/mail/ngx_mail_core_module.c trunk/src/mail/ngx_mail_handler.c trunk/src/mail/ngx_mail_imap_handler.c trunk/src/mail/ngx_mail_imap_module.c trunk/src/mail/ngx_mail_imap_module.h trunk/src/mail/ngx_mail_parse.c trunk/src/mail/ngx_mail_pop3_handler.c trunk/src/mail/ngx_mail_pop3_module.c trunk/src/mail/ngx_mail_pop3_module.h trunk/src/mail/ngx_mail_proxy_module.c trunk/src/mail/ngx_mail_smtp_handler.c trunk/src/mail/ngx_mail_smtp_module.c trunk/src/mail/ngx_mail_smtp_module.h trunk/src/mail/ngx_mail_ssl_module.c trunk/src/mail/ngx_mail_ssl_module.h trunk/src/misc/ngx_google_perftools_module.c trunk/src/mysql/ngx_http_mysql_test.c trunk/src/mysql/ngx_mysql.c trunk/src/mysql/ngx_mysql.h trunk/src/os/unix/ngx_aio_read.c trunk/src/os/unix/ngx_aio_read_chain.c trunk/src/os/unix/ngx_aio_write.c trunk/src/os/unix/ngx_aio_write_chain.c trunk/src/os/unix/ngx_alloc.c trunk/src/os/unix/ngx_alloc.h trunk/src/os/unix/ngx_atomic.h trunk/src/os/unix/ngx_channel.c trunk/src/os/unix/ngx_channel.h trunk/src/os/unix/ngx_daemon.c trunk/src/os/unix/ngx_darwin.h trunk/src/os/unix/ngx_darwin_config.h trunk/src/os/unix/ngx_darwin_init.c trunk/src/os/unix/ngx_darwin_sendfile_chain.c trunk/src/os/unix/ngx_errno.c trunk/src/os/unix/ngx_errno.h trunk/src/os/unix/ngx_file_aio_read.c trunk/src/os/unix/ngx_files.c trunk/src/os/unix/ngx_files.h trunk/src/os/unix/ngx_freebsd.h trunk/src/os/unix/ngx_freebsd_config.h trunk/src/os/unix/ngx_freebsd_init.c trunk/src/os/unix/ngx_freebsd_rfork_thread.c trunk/src/os/unix/ngx_freebsd_rfork_thread.h trunk/src/os/unix/ngx_freebsd_sendfile_chain.c trunk/src/os/unix/ngx_gcc_atomic_amd64.h trunk/src/os/unix/ngx_gcc_atomic_ppc.h trunk/src/os/unix/ngx_gcc_atomic_sparc64.h trunk/src/os/unix/ngx_gcc_atomic_x86.h trunk/src/os/unix/ngx_linux.h trunk/src/os/unix/ngx_linux_aio_read.c trunk/src/os/unix/ngx_linux_config.h trunk/src/os/unix/ngx_linux_init.c trunk/src/os/unix/ngx_linux_sendfile_chain.c trunk/src/os/unix/ngx_os.h trunk/src/os/unix/ngx_posix_config.h trunk/src/os/unix/ngx_posix_init.c trunk/src/os/unix/ngx_process.c trunk/src/os/unix/ngx_process.h trunk/src/os/unix/ngx_process_cycle.c trunk/src/os/unix/ngx_process_cycle.h trunk/src/os/unix/ngx_pthread_thread.c trunk/src/os/unix/ngx_readv_chain.c trunk/src/os/unix/ngx_recv.c trunk/src/os/unix/ngx_send.c trunk/src/os/unix/ngx_setproctitle.c trunk/src/os/unix/ngx_setproctitle.h trunk/src/os/unix/ngx_shmem.c trunk/src/os/unix/ngx_shmem.h trunk/src/os/unix/ngx_socket.c trunk/src/os/unix/ngx_socket.h trunk/src/os/unix/ngx_solaris.h trunk/src/os/unix/ngx_solaris_config.h trunk/src/os/unix/ngx_solaris_init.c trunk/src/os/unix/ngx_solaris_sendfilev_chain.c trunk/src/os/unix/ngx_sunpro_amd64.il trunk/src/os/unix/ngx_sunpro_atomic_sparc64.h trunk/src/os/unix/ngx_sunpro_sparc64.il trunk/src/os/unix/ngx_sunpro_x86.il trunk/src/os/unix/ngx_thread.h trunk/src/os/unix/ngx_time.c trunk/src/os/unix/ngx_time.h trunk/src/os/unix/ngx_udp_recv.c trunk/src/os/unix/ngx_user.c trunk/src/os/unix/ngx_user.h trunk/src/os/unix/ngx_writev_chain.c trunk/src/os/unix/rfork_thread.S trunk/src/os/win32/nginx.rc trunk/src/os/win32/ngx_alloc.c trunk/src/os/win32/ngx_alloc.h trunk/src/os/win32/ngx_atomic.h trunk/src/os/win32/ngx_errno.c trunk/src/os/win32/ngx_errno.h trunk/src/os/win32/ngx_event_log.c trunk/src/os/win32/ngx_files.c trunk/src/os/win32/ngx_files.h trunk/src/os/win32/ngx_os.h trunk/src/os/win32/ngx_process.c trunk/src/os/win32/ngx_process.h trunk/src/os/win32/ngx_process_cycle.c trunk/src/os/win32/ngx_process_cycle.h trunk/src/os/win32/ngx_service.c trunk/src/os/win32/ngx_shmem.c trunk/src/os/win32/ngx_shmem.h trunk/src/os/win32/ngx_socket.c trunk/src/os/win32/ngx_socket.h trunk/src/os/win32/ngx_stat.c trunk/src/os/win32/ngx_thread.c trunk/src/os/win32/ngx_thread.h trunk/src/os/win32/ngx_time.c trunk/src/os/win32/ngx_time.h trunk/src/os/win32/ngx_udp_wsarecv.c trunk/src/os/win32/ngx_user.c trunk/src/os/win32/ngx_user.h trunk/src/os/win32/ngx_win32_config.h trunk/src/os/win32/ngx_win32_init.c trunk/src/os/win32/ngx_wsarecv.c trunk/src/os/win32/ngx_wsarecv_chain.c trunk/src/os/win32/ngx_wsasend.c trunk/src/os/win32/ngx_wsasend_chain.c Modified: trunk/auto/cc/acc =================================================================== --- trunk/auto/cc/acc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/cc/acc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. # aCC: HP ANSI C++ B3910B A.03.55.02 Modified: trunk/auto/cc/bcc =================================================================== --- trunk/auto/cc/bcc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/cc/bcc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. # Borland C++ 5.5 Modified: trunk/auto/cc/ccc =================================================================== --- trunk/auto/cc/ccc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/cc/ccc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. # Compaq C V6.5-207 Modified: trunk/auto/cc/conf =================================================================== --- trunk/auto/cc/conf 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/cc/conf 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. LINK="\$(CC)" Modified: trunk/auto/cc/gcc =================================================================== --- trunk/auto/cc/gcc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/cc/gcc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. # gcc 2.7.2.3, 2.8.1, 2.95.4, egcs-1.1.2 Modified: trunk/auto/cc/icc =================================================================== --- trunk/auto/cc/icc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/cc/icc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. # Intel C++ compiler 7.1, 8.0, 8.1, 9.0, 11.1 Modified: trunk/auto/cc/msvc =================================================================== --- trunk/auto/cc/msvc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/cc/msvc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. # MSVC 6.0 SP2 Modified: trunk/auto/cc/name =================================================================== --- trunk/auto/cc/name 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/cc/name 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ "$NGX_PLATFORM" != win32 ]; then Modified: trunk/auto/cc/owc =================================================================== --- trunk/auto/cc/owc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/cc/owc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. # Open Watcom C 1.0, 1.2, 1.3 Modified: trunk/auto/cc/sunc =================================================================== --- trunk/auto/cc/sunc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/cc/sunc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. # Sun C 5.7 Patch 117837-04 2005/05/11 Sun Studio 10 Modified: trunk/auto/configure =================================================================== --- trunk/auto/configure 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/configure 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ #!/bin/sh # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. . auto/options Modified: trunk/auto/define =================================================================== --- trunk/auto/define 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/define 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. cat << END >> $NGX_AUTO_CONFIG_H Modified: trunk/auto/endianess =================================================================== --- trunk/auto/endianess 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/endianess 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo $ngx_n "checking for system endianess ...$ngx_c" Modified: trunk/auto/feature =================================================================== --- trunk/auto/feature 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/feature 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo $ngx_n "checking for $ngx_feature ...$ngx_c" Modified: trunk/auto/have =================================================================== --- trunk/auto/have 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/have 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. cat << END >> $NGX_AUTO_CONFIG_H Modified: trunk/auto/have_headers =================================================================== --- trunk/auto/have_headers 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/have_headers 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. cat << END >> $NGX_AUTO_HEADERS_H Modified: trunk/auto/headers =================================================================== --- trunk/auto/headers 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/headers 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. ngx_include="unistd.h"; . auto/include Modified: trunk/auto/include =================================================================== --- trunk/auto/include 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/include 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo $ngx_n "checking for $ngx_include ...$ngx_c" Modified: trunk/auto/init =================================================================== --- trunk/auto/init 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/init 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. NGX_MAKEFILE=$NGX_OBJS/Makefile Modified: trunk/auto/install =================================================================== --- trunk/auto/install 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/install 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $USE_PERL = YES ]; then Modified: trunk/auto/lib/conf =================================================================== --- trunk/auto/lib/conf 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/conf 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $USE_PCRE = YES -o $PCRE != NONE ]; then Modified: trunk/auto/lib/geoip/conf =================================================================== --- trunk/auto/lib/geoip/conf 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/geoip/conf 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. ngx_feature="GeoIP library" Modified: trunk/auto/lib/google-perftools/conf =================================================================== --- trunk/auto/lib/google-perftools/conf 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/google-perftools/conf 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. ngx_feature="Google perftools" Modified: trunk/auto/lib/libatomic/conf =================================================================== --- trunk/auto/lib/libatomic/conf 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/libatomic/conf 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $NGX_LIBATOMIC != YES ]; then Modified: trunk/auto/lib/libatomic/make =================================================================== --- trunk/auto/lib/libatomic/make 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/libatomic/make 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. cat << END >> $NGX_MAKEFILE Modified: trunk/auto/lib/libgd/conf =================================================================== --- trunk/auto/lib/libgd/conf 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/libgd/conf 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. ngx_feature="GD library" Modified: trunk/auto/lib/libxslt/conf =================================================================== --- trunk/auto/lib/libxslt/conf 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/libxslt/conf 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. ngx_feature="libxslt" Modified: trunk/auto/lib/make =================================================================== --- trunk/auto/lib/make 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/make 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $PCRE != NONE -a $PCRE != NO -a $PCRE != YES ]; then Modified: trunk/auto/lib/md5/conf =================================================================== --- trunk/auto/lib/md5/conf 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/md5/conf 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $MD5 != NONE ]; then Modified: trunk/auto/lib/md5/make =================================================================== --- trunk/auto/lib/md5/make 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/md5/make 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. case "$NGX_CC_NAME" in Modified: trunk/auto/lib/md5/makefile.bcc =================================================================== --- trunk/auto/lib/md5/makefile.bcc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/md5/makefile.bcc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -q -O2 -tWM $(CPU_OPT) -DL_ENDIAN Modified: trunk/auto/lib/md5/makefile.msvc =================================================================== --- trunk/auto/lib/md5/makefile.msvc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/md5/makefile.msvc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -nologo -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT) -D L_ENDIAN Modified: trunk/auto/lib/md5/makefile.owc =================================================================== --- trunk/auto/lib/md5/makefile.owc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/md5/makefile.owc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -zq -bt=nt -bm -ot -op -oi -oe -s $(CPU_OPT) Modified: trunk/auto/lib/openssl/conf =================================================================== --- trunk/auto/lib/openssl/conf 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/openssl/conf 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $OPENSSL != NONE ]; then Modified: trunk/auto/lib/openssl/make =================================================================== --- trunk/auto/lib/openssl/make 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/openssl/make 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. case "$CC" in Modified: trunk/auto/lib/openssl/makefile.bcc =================================================================== --- trunk/auto/lib/openssl/makefile.bcc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/openssl/makefile.bcc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. all: Modified: trunk/auto/lib/openssl/makefile.msvc =================================================================== --- trunk/auto/lib/openssl/makefile.msvc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/openssl/makefile.msvc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. all: Modified: trunk/auto/lib/pcre/conf =================================================================== --- trunk/auto/lib/pcre/conf 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/pcre/conf 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $PCRE != NONE ]; then Modified: trunk/auto/lib/pcre/make =================================================================== --- trunk/auto/lib/pcre/make 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/pcre/make 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. case "$NGX_CC_NAME" in Modified: trunk/auto/lib/pcre/makefile.bcc =================================================================== --- trunk/auto/lib/pcre/makefile.bcc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/pcre/makefile.bcc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -q -O2 -tWM -w-8004 $(CPU_OPT) Modified: trunk/auto/lib/pcre/makefile.msvc =================================================================== --- trunk/auto/lib/pcre/makefile.msvc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/pcre/makefile.msvc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT) Modified: trunk/auto/lib/pcre/makefile.owc =================================================================== --- trunk/auto/lib/pcre/makefile.owc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/pcre/makefile.owc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -c -zq -bt=nt -ot -op -oi -oe -s -bm $(CPU_OPT) Modified: trunk/auto/lib/perl/conf =================================================================== --- trunk/auto/lib/perl/conf 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/perl/conf 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo "checking for perl" Modified: trunk/auto/lib/perl/make =================================================================== --- trunk/auto/lib/perl/make 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/perl/make 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. cat << END >> $NGX_MAKEFILE Modified: trunk/auto/lib/sha1/conf =================================================================== --- trunk/auto/lib/sha1/conf 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/sha1/conf 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $SHA1 != NONE ]; then Modified: trunk/auto/lib/sha1/make =================================================================== --- trunk/auto/lib/sha1/make 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/sha1/make 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. case "$NGX_CC_NAME" in Modified: trunk/auto/lib/sha1/makefile.bcc =================================================================== --- trunk/auto/lib/sha1/makefile.bcc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/sha1/makefile.bcc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -q -O2 -tWM $(CPU_OPT) -DL_ENDIAN Modified: trunk/auto/lib/sha1/makefile.msvc =================================================================== --- trunk/auto/lib/sha1/makefile.msvc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/sha1/makefile.msvc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -nologo -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT) -D L_ENDIAN Modified: trunk/auto/lib/sha1/makefile.owc =================================================================== --- trunk/auto/lib/sha1/makefile.owc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/sha1/makefile.owc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -zq -bt=nt -bm -ot -op -oi -oe -s $(CPU_OPT) Modified: trunk/auto/lib/test =================================================================== --- trunk/auto/lib/test 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/test 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo $ngx_n "checking for $ngx_lib ...$ngx_c" Modified: trunk/auto/lib/zlib/conf =================================================================== --- trunk/auto/lib/zlib/conf 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/zlib/conf 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $ZLIB != NONE ]; then Modified: trunk/auto/lib/zlib/make =================================================================== --- trunk/auto/lib/zlib/make 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/zlib/make 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. case "$NGX_CC_NAME" in Modified: trunk/auto/lib/zlib/makefile.bcc =================================================================== --- trunk/auto/lib/zlib/makefile.bcc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/zlib/makefile.bcc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -q -O2 -tWM -w-8004 -w-8012 $(CPU_OPT) Modified: trunk/auto/lib/zlib/makefile.msvc =================================================================== --- trunk/auto/lib/zlib/makefile.msvc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/zlib/makefile.msvc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -nologo -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT) Modified: trunk/auto/lib/zlib/makefile.owc =================================================================== --- trunk/auto/lib/zlib/makefile.owc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/lib/zlib/makefile.owc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -zq -bt=nt -ot -op -oi -oe -s -bm $(CPU_OPT) Modified: trunk/auto/make =================================================================== --- trunk/auto/make 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/make 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo "creating $NGX_MAKEFILE" Modified: trunk/auto/modules =================================================================== --- trunk/auto/modules 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/modules 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $EVENT_SELECT = NO -a $EVENT_FOUND = NO ]; then Modified: trunk/auto/nohave =================================================================== --- trunk/auto/nohave 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/nohave 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. cat << END >> $NGX_AUTO_CONFIG_H Modified: trunk/auto/options =================================================================== --- trunk/auto/options 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/options 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. help=no Modified: trunk/auto/os/conf =================================================================== --- trunk/auto/os/conf 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/os/conf 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo "checking for $NGX_SYSTEM specific features" Modified: trunk/auto/os/darwin =================================================================== --- trunk/auto/os/darwin 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/os/darwin 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. have=NGX_DARWIN . auto/have_headers Modified: trunk/auto/os/freebsd =================================================================== --- trunk/auto/os/freebsd 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/os/freebsd 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. have=NGX_FREEBSD . auto/have_headers Modified: trunk/auto/os/linux =================================================================== --- trunk/auto/os/linux 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/os/linux 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. have=NGX_LINUX . auto/have_headers Modified: trunk/auto/os/solaris =================================================================== --- trunk/auto/os/solaris 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/os/solaris 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. have=NGX_SOLARIS . auto/have_headers Modified: trunk/auto/os/win32 =================================================================== --- trunk/auto/os/win32 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/os/win32 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. have=NGX_WIN32 . auto/have_headers Modified: trunk/auto/sources =================================================================== --- trunk/auto/sources 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/sources 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CORE_MODULES="ngx_core_module ngx_errlog_module ngx_conf_module" Modified: trunk/auto/stubs =================================================================== --- trunk/auto/stubs 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/stubs 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. have=NGX_SUPPRESS_WARN . auto/have Modified: trunk/auto/summary =================================================================== --- trunk/auto/summary 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/summary 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. ### STUB Modified: trunk/auto/types/sizeof =================================================================== --- trunk/auto/types/sizeof 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/types/sizeof 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo $ngx_n "checking for $ngx_type size ...$ngx_c" Modified: trunk/auto/types/typedef =================================================================== --- trunk/auto/types/typedef 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/types/typedef 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo $ngx_n "checking for $ngx_type ...$ngx_c" Modified: trunk/auto/types/uintptr_t =================================================================== --- trunk/auto/types/uintptr_t 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/types/uintptr_t 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo $ngx_n "checking for uintptr_t ...$ngx_c" Modified: trunk/auto/types/value =================================================================== --- trunk/auto/types/value 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/types/value 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. cat << END >> $NGX_AUTO_CONFIG_H Modified: trunk/auto/unix =================================================================== --- trunk/auto/unix 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/auto/unix 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. NGX_USER=${NGX_USER:-nobody} Modified: trunk/docs/man/nginx.8 =================================================================== --- trunk/docs/man/nginx.8 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/docs/man/nginx.8 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ .\" .\" Copyright (c) 2010 Sergey A. Osokin +.\" Copyright (c) 2011,2012 Nginx, Inc. .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without Modified: trunk/docs/text/LICENSE =================================================================== --- trunk/docs/text/LICENSE 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/docs/text/LICENSE 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ /* * Copyright (C) 2002-2012 Igor Sysoev + * Copyright (C) 2011,2012 Nginx, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: trunk/src/core/nginx.c =================================================================== --- trunk/src/core/nginx.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/nginx.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/nginx.h =================================================================== --- trunk/src/core/nginx.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/nginx.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_array.c =================================================================== --- trunk/src/core/ngx_array.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_array.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_array.h =================================================================== --- trunk/src/core/ngx_array.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_array.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_buf.c =================================================================== --- trunk/src/core/ngx_buf.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_buf.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_buf.h =================================================================== --- trunk/src/core/ngx_buf.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_buf.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_conf_file.c =================================================================== --- trunk/src/core/ngx_conf_file.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_conf_file.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_conf_file.h =================================================================== --- trunk/src/core/ngx_conf_file.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_conf_file.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_config.h =================================================================== --- trunk/src/core/ngx_config.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_config.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_connection.c =================================================================== --- trunk/src/core/ngx_connection.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_connection.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_connection.h =================================================================== --- trunk/src/core/ngx_connection.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_connection.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_core.h =================================================================== --- trunk/src/core/ngx_core.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_core.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_cpuinfo.c =================================================================== --- trunk/src/core/ngx_cpuinfo.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_cpuinfo.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_crc.h =================================================================== --- trunk/src/core/ngx_crc.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_crc.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_crc32.c =================================================================== --- trunk/src/core/ngx_crc32.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_crc32.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_crc32.h =================================================================== --- trunk/src/core/ngx_crc32.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_crc32.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_crypt.h =================================================================== --- trunk/src/core/ngx_crypt.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_crypt.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_cycle.c =================================================================== --- trunk/src/core/ngx_cycle.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_cycle.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_cycle.h =================================================================== --- trunk/src/core/ngx_cycle.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_cycle.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_file.c =================================================================== --- trunk/src/core/ngx_file.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_file.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_file.h =================================================================== --- trunk/src/core/ngx_file.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_file.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_hash.c =================================================================== --- trunk/src/core/ngx_hash.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_hash.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_hash.h =================================================================== --- trunk/src/core/ngx_hash.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_hash.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_inet.c =================================================================== --- trunk/src/core/ngx_inet.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_inet.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_inet.h =================================================================== --- trunk/src/core/ngx_inet.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_inet.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_list.c =================================================================== --- trunk/src/core/ngx_list.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_list.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_list.h =================================================================== --- trunk/src/core/ngx_list.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_list.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_log.c =================================================================== --- trunk/src/core/ngx_log.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_log.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_log.h =================================================================== --- trunk/src/core/ngx_log.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_log.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_md5.h =================================================================== --- trunk/src/core/ngx_md5.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_md5.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_murmurhash.h =================================================================== --- trunk/src/core/ngx_murmurhash.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_murmurhash.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_open_file_cache.c =================================================================== --- trunk/src/core/ngx_open_file_cache.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_open_file_cache.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_open_file_cache.h =================================================================== --- trunk/src/core/ngx_open_file_cache.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_open_file_cache.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_output_chain.c =================================================================== --- trunk/src/core/ngx_output_chain.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_output_chain.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_palloc.c =================================================================== --- trunk/src/core/ngx_palloc.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_palloc.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_palloc.h =================================================================== --- trunk/src/core/ngx_palloc.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_palloc.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_parse.c =================================================================== --- trunk/src/core/ngx_parse.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_parse.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_parse.h =================================================================== --- trunk/src/core/ngx_parse.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_parse.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_queue.c =================================================================== --- trunk/src/core/ngx_queue.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_queue.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_queue.h =================================================================== --- trunk/src/core/ngx_queue.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_queue.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_radix_tree.c =================================================================== --- trunk/src/core/ngx_radix_tree.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_radix_tree.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_radix_tree.h =================================================================== --- trunk/src/core/ngx_radix_tree.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_radix_tree.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_rbtree.c =================================================================== --- trunk/src/core/ngx_rbtree.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_rbtree.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_rbtree.h =================================================================== --- trunk/src/core/ngx_rbtree.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_rbtree.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_regex.c =================================================================== --- trunk/src/core/ngx_regex.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_regex.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_regex.h =================================================================== --- trunk/src/core/ngx_regex.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_regex.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_resolver.c =================================================================== --- trunk/src/core/ngx_resolver.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_resolver.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_resolver.h =================================================================== --- trunk/src/core/ngx_resolver.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_resolver.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_sha1.h =================================================================== --- trunk/src/core/ngx_sha1.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_sha1.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_shmtx.c =================================================================== --- trunk/src/core/ngx_shmtx.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_shmtx.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_shmtx.h =================================================================== --- trunk/src/core/ngx_shmtx.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_shmtx.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_slab.c =================================================================== --- trunk/src/core/ngx_slab.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_slab.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ #include Modified: trunk/src/core/ngx_slab.h =================================================================== --- trunk/src/core/ngx_slab.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_slab.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_spinlock.c =================================================================== --- trunk/src/core/ngx_spinlock.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_spinlock.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_string.c =================================================================== --- trunk/src/core/ngx_string.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_string.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_string.h =================================================================== --- trunk/src/core/ngx_string.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_string.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_times.c =================================================================== --- trunk/src/core/ngx_times.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_times.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/core/ngx_times.h =================================================================== --- trunk/src/core/ngx_times.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/core/ngx_times.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/modules/ngx_aio_module.c =================================================================== --- trunk/src/event/modules/ngx_aio_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/modules/ngx_aio_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/modules/ngx_devpoll_module.c =================================================================== --- trunk/src/event/modules/ngx_devpoll_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/modules/ngx_devpoll_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/modules/ngx_epoll_module.c =================================================================== --- trunk/src/event/modules/ngx_epoll_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/modules/ngx_epoll_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/modules/ngx_eventport_module.c =================================================================== --- trunk/src/event/modules/ngx_eventport_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/modules/ngx_eventport_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/modules/ngx_iocp_module.c =================================================================== --- trunk/src/event/modules/ngx_iocp_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/modules/ngx_iocp_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/modules/ngx_iocp_module.h =================================================================== --- trunk/src/event/modules/ngx_iocp_module.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/modules/ngx_iocp_module.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/modules/ngx_kqueue_module.c =================================================================== --- trunk/src/event/modules/ngx_kqueue_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/modules/ngx_kqueue_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/modules/ngx_poll_module.c =================================================================== --- trunk/src/event/modules/ngx_poll_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/modules/ngx_poll_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/modules/ngx_rtsig_module.c =================================================================== --- trunk/src/event/modules/ngx_rtsig_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/modules/ngx_rtsig_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/modules/ngx_select_module.c =================================================================== --- trunk/src/event/modules/ngx_select_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/modules/ngx_select_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/modules/ngx_win32_select_module.c =================================================================== --- trunk/src/event/modules/ngx_win32_select_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/modules/ngx_win32_select_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/ngx_event.c =================================================================== --- trunk/src/event/ngx_event.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/ngx_event.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/ngx_event.h =================================================================== --- trunk/src/event/ngx_event.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/ngx_event.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/ngx_event_accept.c =================================================================== --- trunk/src/event/ngx_event_accept.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/ngx_event_accept.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/ngx_event_acceptex.c =================================================================== --- trunk/src/event/ngx_event_acceptex.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/ngx_event_acceptex.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/ngx_event_busy_lock.c =================================================================== --- trunk/src/event/ngx_event_busy_lock.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/ngx_event_busy_lock.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/ngx_event_busy_lock.h =================================================================== --- trunk/src/event/ngx_event_busy_lock.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/ngx_event_busy_lock.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/ngx_event_connect.c =================================================================== --- trunk/src/event/ngx_event_connect.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/ngx_event_connect.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/ngx_event_connect.h =================================================================== --- trunk/src/event/ngx_event_connect.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/ngx_event_connect.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/ngx_event_connectex.c =================================================================== --- trunk/src/event/ngx_event_connectex.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/ngx_event_connectex.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/ngx_event_mutex.c =================================================================== --- trunk/src/event/ngx_event_mutex.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/ngx_event_mutex.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/ngx_event_openssl.c =================================================================== --- trunk/src/event/ngx_event_openssl.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/ngx_event_openssl.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/ngx_event_openssl.h =================================================================== --- trunk/src/event/ngx_event_openssl.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/ngx_event_openssl.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/ngx_event_pipe.c =================================================================== --- trunk/src/event/ngx_event_pipe.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/ngx_event_pipe.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/ngx_event_pipe.h =================================================================== --- trunk/src/event/ngx_event_pipe.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/ngx_event_pipe.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/ngx_event_posted.c =================================================================== --- trunk/src/event/ngx_event_posted.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/ngx_event_posted.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/ngx_event_posted.h =================================================================== --- trunk/src/event/ngx_event_posted.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/ngx_event_posted.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/ngx_event_timer.c =================================================================== --- trunk/src/event/ngx_event_timer.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/ngx_event_timer.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/event/ngx_event_timer.h =================================================================== --- trunk/src/event/ngx_event_timer.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/event/ngx_event_timer.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_access_module.c =================================================================== --- trunk/src/http/modules/ngx_http_access_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_access_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_addition_filter_module.c =================================================================== --- trunk/src/http/modules/ngx_http_addition_filter_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_addition_filter_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_auth_basic_module.c =================================================================== --- trunk/src/http/modules/ngx_http_auth_basic_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_auth_basic_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_autoindex_module.c =================================================================== --- trunk/src/http/modules/ngx_http_autoindex_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_autoindex_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_browser_module.c =================================================================== --- trunk/src/http/modules/ngx_http_browser_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_browser_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_charset_filter_module.c =================================================================== --- trunk/src/http/modules/ngx_http_charset_filter_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_charset_filter_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_chunked_filter_module.c =================================================================== --- trunk/src/http/modules/ngx_http_chunked_filter_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_chunked_filter_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_dav_module.c =================================================================== --- trunk/src/http/modules/ngx_http_dav_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_dav_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_degradation_module.c =================================================================== --- trunk/src/http/modules/ngx_http_degradation_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_degradation_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_empty_gif_module.c =================================================================== --- trunk/src/http/modules/ngx_http_empty_gif_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_empty_gif_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ #include Modified: trunk/src/http/modules/ngx_http_fastcgi_module.c =================================================================== --- trunk/src/http/modules/ngx_http_fastcgi_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_fastcgi_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_flv_module.c =================================================================== --- trunk/src/http/modules/ngx_http_flv_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_flv_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ #include Modified: trunk/src/http/modules/ngx_http_geo_module.c =================================================================== --- trunk/src/http/modules/ngx_http_geo_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_geo_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_geoip_module.c =================================================================== --- trunk/src/http/modules/ngx_http_geoip_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_geoip_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_gzip_filter_module.c =================================================================== --- trunk/src/http/modules/ngx_http_gzip_filter_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_gzip_filter_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_gzip_static_module.c =================================================================== --- trunk/src/http/modules/ngx_http_gzip_static_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_gzip_static_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_headers_filter_module.c =================================================================== --- trunk/src/http/modules/ngx_http_headers_filter_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_headers_filter_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_image_filter_module.c =================================================================== --- trunk/src/http/modules/ngx_http_image_filter_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_image_filter_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_index_module.c =================================================================== --- trunk/src/http/modules/ngx_http_index_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_index_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_limit_conn_module.c =================================================================== --- trunk/src/http/modules/ngx_http_limit_conn_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_limit_conn_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_limit_req_module.c =================================================================== --- trunk/src/http/modules/ngx_http_limit_req_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_limit_req_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_log_module.c =================================================================== --- trunk/src/http/modules/ngx_http_log_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_log_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_map_module.c =================================================================== --- trunk/src/http/modules/ngx_http_map_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_map_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_memcached_module.c =================================================================== --- trunk/src/http/modules/ngx_http_memcached_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_memcached_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_mp4_module.c =================================================================== --- trunk/src/http/modules/ngx_http_mp4_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_mp4_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ #include Modified: trunk/src/http/modules/ngx_http_not_modified_filter_module.c =================================================================== --- trunk/src/http/modules/ngx_http_not_modified_filter_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_not_modified_filter_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_proxy_module.c =================================================================== --- trunk/src/http/modules/ngx_http_proxy_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_proxy_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_random_index_module.c =================================================================== --- trunk/src/http/modules/ngx_http_random_index_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_random_index_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_range_filter_module.c =================================================================== --- trunk/src/http/modules/ngx_http_range_filter_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_range_filter_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_realip_module.c =================================================================== --- trunk/src/http/modules/ngx_http_realip_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_realip_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_referer_module.c =================================================================== --- trunk/src/http/modules/ngx_http_referer_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_referer_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_rewrite_module.c =================================================================== --- trunk/src/http/modules/ngx_http_rewrite_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_rewrite_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_scgi_module.c =================================================================== --- trunk/src/http/modules/ngx_http_scgi_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_scgi_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. * Copyright (C) Manlio Perillo (manlio.perillo at gmail.com) */ Modified: trunk/src/http/modules/ngx_http_secure_link_module.c =================================================================== --- trunk/src/http/modules/ngx_http_secure_link_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_secure_link_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_split_clients_module.c =================================================================== --- trunk/src/http/modules/ngx_http_split_clients_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_split_clients_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_ssi_filter_module.c =================================================================== --- trunk/src/http/modules/ngx_http_ssi_filter_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_ssi_filter_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_ssi_filter_module.h =================================================================== --- trunk/src/http/modules/ngx_http_ssi_filter_module.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_ssi_filter_module.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_ssl_module.c =================================================================== --- trunk/src/http/modules/ngx_http_ssl_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_ssl_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_ssl_module.h =================================================================== --- trunk/src/http/modules/ngx_http_ssl_module.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_ssl_module.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_static_module.c =================================================================== --- trunk/src/http/modules/ngx_http_static_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_static_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_stub_status_module.c =================================================================== --- trunk/src/http/modules/ngx_http_stub_status_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_stub_status_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_sub_filter_module.c =================================================================== --- trunk/src/http/modules/ngx_http_sub_filter_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_sub_filter_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_upstream_ip_hash_module.c =================================================================== --- trunk/src/http/modules/ngx_http_upstream_ip_hash_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_upstream_ip_hash_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_upstream_keepalive_module.c =================================================================== --- trunk/src/http/modules/ngx_http_upstream_keepalive_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_upstream_keepalive_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Maxim Dounin + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_userid_filter_module.c =================================================================== --- trunk/src/http/modules/ngx_http_userid_filter_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_userid_filter_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_uwsgi_module.c =================================================================== --- trunk/src/http/modules/ngx_http_uwsgi_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_uwsgi_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -3,6 +3,7 @@ * Copyright (C) Unbit S.a.s. 2009-2010 * Copyright (C) 2008 Manlio Perillo (manlio.perillo at gmail.com) * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/ngx_http_xslt_filter_module.c =================================================================== --- trunk/src/http/modules/ngx_http_xslt_filter_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/ngx_http_xslt_filter_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/perl/Makefile.PL =================================================================== --- trunk/src/http/modules/perl/Makefile.PL 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/perl/Makefile.PL 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. use 5.006001; use ExtUtils::MakeMaker; Modified: trunk/src/http/modules/perl/nginx.xs =================================================================== --- trunk/src/http/modules/perl/nginx.xs 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/perl/nginx.xs 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/perl/ngx_http_perl_module.c =================================================================== --- trunk/src/http/modules/perl/ngx_http_perl_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/perl/ngx_http_perl_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/modules/perl/ngx_http_perl_module.h =================================================================== --- trunk/src/http/modules/perl/ngx_http_perl_module.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/modules/perl/ngx_http_perl_module.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http.c =================================================================== --- trunk/src/http/ngx_http.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http.h =================================================================== --- trunk/src/http/ngx_http.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_busy_lock.c =================================================================== --- trunk/src/http/ngx_http_busy_lock.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_busy_lock.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_busy_lock.h =================================================================== --- trunk/src/http/ngx_http_busy_lock.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_busy_lock.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_cache.h =================================================================== --- trunk/src/http/ngx_http_cache.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_cache.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_config.h =================================================================== --- trunk/src/http/ngx_http_config.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_config.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_copy_filter_module.c =================================================================== --- trunk/src/http/ngx_http_copy_filter_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_copy_filter_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_core_module.c =================================================================== --- trunk/src/http/ngx_http_core_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_core_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_core_module.h =================================================================== --- trunk/src/http/ngx_http_core_module.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_core_module.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_file_cache.c =================================================================== --- trunk/src/http/ngx_http_file_cache.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_file_cache.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_header_filter_module.c =================================================================== --- trunk/src/http/ngx_http_header_filter_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_header_filter_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_parse.c =================================================================== --- trunk/src/http/ngx_http_parse.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_parse.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_parse_time.c =================================================================== --- trunk/src/http/ngx_http_parse_time.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_parse_time.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_postpone_filter_module.c =================================================================== --- trunk/src/http/ngx_http_postpone_filter_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_postpone_filter_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_request.c =================================================================== --- trunk/src/http/ngx_http_request.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_request.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_request.h =================================================================== --- trunk/src/http/ngx_http_request.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_request.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_request_body.c =================================================================== --- trunk/src/http/ngx_http_request_body.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_request_body.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_script.c =================================================================== --- trunk/src/http/ngx_http_script.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_script.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_script.h =================================================================== --- trunk/src/http/ngx_http_script.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_script.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_special_response.c =================================================================== --- trunk/src/http/ngx_http_special_response.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_special_response.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_upstream.c =================================================================== --- trunk/src/http/ngx_http_upstream.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_upstream.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_upstream.h =================================================================== --- trunk/src/http/ngx_http_upstream.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_upstream.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_upstream_round_robin.c =================================================================== --- trunk/src/http/ngx_http_upstream_round_robin.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_upstream_round_robin.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_upstream_round_robin.h =================================================================== --- trunk/src/http/ngx_http_upstream_round_robin.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_upstream_round_robin.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_variables.c =================================================================== --- trunk/src/http/ngx_http_variables.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_variables.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_variables.h =================================================================== --- trunk/src/http/ngx_http_variables.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_variables.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/http/ngx_http_write_filter_module.c =================================================================== --- trunk/src/http/ngx_http_write_filter_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/http/ngx_http_write_filter_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mail/ngx_mail.c =================================================================== --- trunk/src/mail/ngx_mail.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mail/ngx_mail.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mail/ngx_mail.h =================================================================== --- trunk/src/mail/ngx_mail.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mail/ngx_mail.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mail/ngx_mail_auth_http_module.c =================================================================== --- trunk/src/mail/ngx_mail_auth_http_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mail/ngx_mail_auth_http_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mail/ngx_mail_core_module.c =================================================================== --- trunk/src/mail/ngx_mail_core_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mail/ngx_mail_core_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mail/ngx_mail_handler.c =================================================================== --- trunk/src/mail/ngx_mail_handler.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mail/ngx_mail_handler.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mail/ngx_mail_imap_handler.c =================================================================== --- trunk/src/mail/ngx_mail_imap_handler.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mail/ngx_mail_imap_handler.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mail/ngx_mail_imap_module.c =================================================================== --- trunk/src/mail/ngx_mail_imap_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mail/ngx_mail_imap_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mail/ngx_mail_imap_module.h =================================================================== --- trunk/src/mail/ngx_mail_imap_module.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mail/ngx_mail_imap_module.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mail/ngx_mail_parse.c =================================================================== --- trunk/src/mail/ngx_mail_parse.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mail/ngx_mail_parse.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mail/ngx_mail_pop3_handler.c =================================================================== --- trunk/src/mail/ngx_mail_pop3_handler.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mail/ngx_mail_pop3_handler.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mail/ngx_mail_pop3_module.c =================================================================== --- trunk/src/mail/ngx_mail_pop3_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mail/ngx_mail_pop3_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mail/ngx_mail_pop3_module.h =================================================================== --- trunk/src/mail/ngx_mail_pop3_module.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mail/ngx_mail_pop3_module.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mail/ngx_mail_proxy_module.c =================================================================== --- trunk/src/mail/ngx_mail_proxy_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mail/ngx_mail_proxy_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mail/ngx_mail_smtp_handler.c =================================================================== --- trunk/src/mail/ngx_mail_smtp_handler.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mail/ngx_mail_smtp_handler.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mail/ngx_mail_smtp_module.c =================================================================== --- trunk/src/mail/ngx_mail_smtp_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mail/ngx_mail_smtp_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mail/ngx_mail_smtp_module.h =================================================================== --- trunk/src/mail/ngx_mail_smtp_module.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mail/ngx_mail_smtp_module.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mail/ngx_mail_ssl_module.c =================================================================== --- trunk/src/mail/ngx_mail_ssl_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mail/ngx_mail_ssl_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mail/ngx_mail_ssl_module.h =================================================================== --- trunk/src/mail/ngx_mail_ssl_module.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mail/ngx_mail_ssl_module.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/misc/ngx_google_perftools_module.c =================================================================== --- trunk/src/misc/ngx_google_perftools_module.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/misc/ngx_google_perftools_module.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mysql/ngx_http_mysql_test.c =================================================================== --- trunk/src/mysql/ngx_http_mysql_test.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mysql/ngx_http_mysql_test.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ #include Modified: trunk/src/mysql/ngx_mysql.c =================================================================== --- trunk/src/mysql/ngx_mysql.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mysql/ngx_mysql.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/mysql/ngx_mysql.h =================================================================== --- trunk/src/mysql/ngx_mysql.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/mysql/ngx_mysql.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_aio_read.c =================================================================== --- trunk/src/os/unix/ngx_aio_read.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_aio_read.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_aio_read_chain.c =================================================================== --- trunk/src/os/unix/ngx_aio_read_chain.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_aio_read_chain.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_aio_write.c =================================================================== --- trunk/src/os/unix/ngx_aio_write.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_aio_write.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_aio_write_chain.c =================================================================== --- trunk/src/os/unix/ngx_aio_write_chain.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_aio_write_chain.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_alloc.c =================================================================== --- trunk/src/os/unix/ngx_alloc.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_alloc.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_alloc.h =================================================================== --- trunk/src/os/unix/ngx_alloc.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_alloc.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_atomic.h =================================================================== --- trunk/src/os/unix/ngx_atomic.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_atomic.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_channel.c =================================================================== --- trunk/src/os/unix/ngx_channel.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_channel.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_channel.h =================================================================== --- trunk/src/os/unix/ngx_channel.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_channel.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_daemon.c =================================================================== --- trunk/src/os/unix/ngx_daemon.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_daemon.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_darwin.h =================================================================== --- trunk/src/os/unix/ngx_darwin.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_darwin.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_darwin_config.h =================================================================== --- trunk/src/os/unix/ngx_darwin_config.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_darwin_config.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_darwin_init.c =================================================================== --- trunk/src/os/unix/ngx_darwin_init.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_darwin_init.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_darwin_sendfile_chain.c =================================================================== --- trunk/src/os/unix/ngx_darwin_sendfile_chain.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_darwin_sendfile_chain.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_errno.c =================================================================== --- trunk/src/os/unix/ngx_errno.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_errno.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_errno.h =================================================================== --- trunk/src/os/unix/ngx_errno.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_errno.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_file_aio_read.c =================================================================== --- trunk/src/os/unix/ngx_file_aio_read.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_file_aio_read.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_files.c =================================================================== --- trunk/src/os/unix/ngx_files.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_files.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_files.h =================================================================== --- trunk/src/os/unix/ngx_files.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_files.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_freebsd.h =================================================================== --- trunk/src/os/unix/ngx_freebsd.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_freebsd.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_freebsd_config.h =================================================================== --- trunk/src/os/unix/ngx_freebsd_config.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_freebsd_config.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_freebsd_init.c =================================================================== --- trunk/src/os/unix/ngx_freebsd_init.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_freebsd_init.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_freebsd_rfork_thread.c =================================================================== --- trunk/src/os/unix/ngx_freebsd_rfork_thread.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_freebsd_rfork_thread.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_freebsd_rfork_thread.h =================================================================== --- trunk/src/os/unix/ngx_freebsd_rfork_thread.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_freebsd_rfork_thread.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_freebsd_sendfile_chain.c =================================================================== --- trunk/src/os/unix/ngx_freebsd_sendfile_chain.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_freebsd_sendfile_chain.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_gcc_atomic_amd64.h =================================================================== --- trunk/src/os/unix/ngx_gcc_atomic_amd64.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_gcc_atomic_amd64.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_gcc_atomic_ppc.h =================================================================== --- trunk/src/os/unix/ngx_gcc_atomic_ppc.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_gcc_atomic_ppc.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_gcc_atomic_sparc64.h =================================================================== --- trunk/src/os/unix/ngx_gcc_atomic_sparc64.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_gcc_atomic_sparc64.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_gcc_atomic_x86.h =================================================================== --- trunk/src/os/unix/ngx_gcc_atomic_x86.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_gcc_atomic_x86.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_linux.h =================================================================== --- trunk/src/os/unix/ngx_linux.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_linux.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_linux_aio_read.c =================================================================== --- trunk/src/os/unix/ngx_linux_aio_read.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_linux_aio_read.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_linux_config.h =================================================================== --- trunk/src/os/unix/ngx_linux_config.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_linux_config.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_linux_init.c =================================================================== --- trunk/src/os/unix/ngx_linux_init.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_linux_init.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_linux_sendfile_chain.c =================================================================== --- trunk/src/os/unix/ngx_linux_sendfile_chain.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_linux_sendfile_chain.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_os.h =================================================================== --- trunk/src/os/unix/ngx_os.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_os.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_posix_config.h =================================================================== --- trunk/src/os/unix/ngx_posix_config.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_posix_config.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_posix_init.c =================================================================== --- trunk/src/os/unix/ngx_posix_init.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_posix_init.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_process.c =================================================================== --- trunk/src/os/unix/ngx_process.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_process.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_process.h =================================================================== --- trunk/src/os/unix/ngx_process.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_process.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_process_cycle.c =================================================================== --- trunk/src/os/unix/ngx_process_cycle.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_process_cycle.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_process_cycle.h =================================================================== --- trunk/src/os/unix/ngx_process_cycle.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_process_cycle.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_pthread_thread.c =================================================================== --- trunk/src/os/unix/ngx_pthread_thread.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_pthread_thread.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_readv_chain.c =================================================================== --- trunk/src/os/unix/ngx_readv_chain.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_readv_chain.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_recv.c =================================================================== --- trunk/src/os/unix/ngx_recv.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_recv.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_send.c =================================================================== --- trunk/src/os/unix/ngx_send.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_send.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_setproctitle.c =================================================================== --- trunk/src/os/unix/ngx_setproctitle.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_setproctitle.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_setproctitle.h =================================================================== --- trunk/src/os/unix/ngx_setproctitle.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_setproctitle.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_shmem.c =================================================================== --- trunk/src/os/unix/ngx_shmem.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_shmem.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_shmem.h =================================================================== --- trunk/src/os/unix/ngx_shmem.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_shmem.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_socket.c =================================================================== --- trunk/src/os/unix/ngx_socket.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_socket.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_socket.h =================================================================== --- trunk/src/os/unix/ngx_socket.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_socket.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_solaris.h =================================================================== --- trunk/src/os/unix/ngx_solaris.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_solaris.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_solaris_config.h =================================================================== --- trunk/src/os/unix/ngx_solaris_config.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_solaris_config.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_solaris_init.c =================================================================== --- trunk/src/os/unix/ngx_solaris_init.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_solaris_init.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_solaris_sendfilev_chain.c =================================================================== --- trunk/src/os/unix/ngx_solaris_sendfilev_chain.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_solaris_sendfilev_chain.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_sunpro_amd64.il =================================================================== --- trunk/src/os/unix/ngx_sunpro_amd64.il 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_sunpro_amd64.il 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ / / Copyright (C) Igor Sysoev +/ Copyright (C) Nginx, Inc. / / ngx_atomic_uint_t ngx_atomic_cmp_set(ngx_atomic_t *lock, Modified: trunk/src/os/unix/ngx_sunpro_atomic_sparc64.h =================================================================== --- trunk/src/os/unix/ngx_sunpro_atomic_sparc64.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_sunpro_atomic_sparc64.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_sunpro_sparc64.il =================================================================== --- trunk/src/os/unix/ngx_sunpro_sparc64.il 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_sunpro_sparc64.il 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ / / Copyright (C) Igor Sysoev +/ Copyright (C) Nginx, Inc. / Modified: trunk/src/os/unix/ngx_sunpro_x86.il =================================================================== --- trunk/src/os/unix/ngx_sunpro_x86.il 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_sunpro_x86.il 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ / / Copyright (C) Igor Sysoev +/ Copyright (C) Nginx, Inc. / / ngx_atomic_uint_t ngx_atomic_cmp_set(ngx_atomic_t *lock, Modified: trunk/src/os/unix/ngx_thread.h =================================================================== --- trunk/src/os/unix/ngx_thread.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_thread.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_time.c =================================================================== --- trunk/src/os/unix/ngx_time.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_time.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_time.h =================================================================== --- trunk/src/os/unix/ngx_time.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_time.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_udp_recv.c =================================================================== --- trunk/src/os/unix/ngx_udp_recv.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_udp_recv.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_user.c =================================================================== --- trunk/src/os/unix/ngx_user.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_user.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_user.h =================================================================== --- trunk/src/os/unix/ngx_user.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_user.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/ngx_writev_chain.c =================================================================== --- trunk/src/os/unix/ngx_writev_chain.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/ngx_writev_chain.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/unix/rfork_thread.S =================================================================== --- trunk/src/os/unix/rfork_thread.S 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/unix/rfork_thread.S 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/nginx.rc =================================================================== --- trunk/src/os/win32/nginx.rc 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/nginx.rc 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ // Copyright (C) Igor Sysoev +// Copyright (C) Nginx, Inc. nginx icon discardable "src\\os\\win32\\nginx.ico" Modified: trunk/src/os/win32/ngx_alloc.c =================================================================== --- trunk/src/os/win32/ngx_alloc.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_alloc.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_alloc.h =================================================================== --- trunk/src/os/win32/ngx_alloc.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_alloc.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_atomic.h =================================================================== --- trunk/src/os/win32/ngx_atomic.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_atomic.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_errno.c =================================================================== --- trunk/src/os/win32/ngx_errno.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_errno.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_errno.h =================================================================== --- trunk/src/os/win32/ngx_errno.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_errno.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_event_log.c =================================================================== --- trunk/src/os/win32/ngx_event_log.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_event_log.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_files.c =================================================================== --- trunk/src/os/win32/ngx_files.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_files.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_files.h =================================================================== --- trunk/src/os/win32/ngx_files.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_files.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_os.h =================================================================== --- trunk/src/os/win32/ngx_os.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_os.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_process.c =================================================================== --- trunk/src/os/win32/ngx_process.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_process.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_process.h =================================================================== --- trunk/src/os/win32/ngx_process.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_process.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_process_cycle.c =================================================================== --- trunk/src/os/win32/ngx_process_cycle.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_process_cycle.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_process_cycle.h =================================================================== --- trunk/src/os/win32/ngx_process_cycle.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_process_cycle.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_service.c =================================================================== --- trunk/src/os/win32/ngx_service.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_service.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_shmem.c =================================================================== --- trunk/src/os/win32/ngx_shmem.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_shmem.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_shmem.h =================================================================== --- trunk/src/os/win32/ngx_shmem.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_shmem.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_socket.c =================================================================== --- trunk/src/os/win32/ngx_socket.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_socket.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_socket.h =================================================================== --- trunk/src/os/win32/ngx_socket.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_socket.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_stat.c =================================================================== --- trunk/src/os/win32/ngx_stat.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_stat.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_thread.c =================================================================== --- trunk/src/os/win32/ngx_thread.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_thread.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_thread.h =================================================================== --- trunk/src/os/win32/ngx_thread.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_thread.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_time.c =================================================================== --- trunk/src/os/win32/ngx_time.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_time.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_time.h =================================================================== --- trunk/src/os/win32/ngx_time.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_time.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_udp_wsarecv.c =================================================================== --- trunk/src/os/win32/ngx_udp_wsarecv.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_udp_wsarecv.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_user.c =================================================================== --- trunk/src/os/win32/ngx_user.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_user.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,5 +1,6 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_user.h =================================================================== --- trunk/src/os/win32/ngx_user.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_user.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_win32_config.h =================================================================== --- trunk/src/os/win32/ngx_win32_config.h 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_win32_config.h 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_win32_init.c =================================================================== --- trunk/src/os/win32/ngx_win32_init.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_win32_init.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_wsarecv.c =================================================================== --- trunk/src/os/win32/ngx_wsarecv.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_wsarecv.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_wsarecv_chain.c =================================================================== --- trunk/src/os/win32/ngx_wsarecv_chain.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_wsarecv_chain.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_wsasend.c =================================================================== --- trunk/src/os/win32/ngx_wsasend.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_wsasend.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ Modified: trunk/src/os/win32/ngx_wsasend_chain.c =================================================================== --- trunk/src/os/win32/ngx_wsasend_chain.c 2012-01-18 15:04:17 UTC (rev 4412) +++ trunk/src/os/win32/ngx_wsasend_chain.c 2012-01-18 15:07:43 UTC (rev 4413) @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ From toli at webforge.bg Wed Jan 18 16:27:42 2012 From: toli at webforge.bg (Anatoli Marinov) Date: Wed, 18 Jan 2012 18:27:42 +0200 Subject: send file from tmp directory Message-ID: <4F16F2FE.6080903@webforge.bg> Hello Colleagues, I am working on a patch for upstream and proxy_cache that should serve files not only from cache dir but also from tmp dir. At the moment I can send only first 114,327 bytes from file in tmp dir. Its size is more than 1 MB. The code is: check the file is in tmp dir if it is call : ngx_int_t ngx_http_tmp_send(ngx_http_request_t *r) { ngx_int_t rc; ngx_buf_t *b; ngx_chain_t out; ngx_http_cache_t *c; ngx_http_tmp_cache_node_t *n; c = r->cache; b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t)); if (b == NULL) { return NGX_HTTP_INTERNAL_SERVER_ERROR; } b->file = ngx_pcalloc(r->pool, sizeof(ngx_file_t)); if (b->file == NULL) { return NGX_HTTP_INTERNAL_SERVER_ERROR; } rc = ngx_http_send_header(r); if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) { return rc; } n = r->tmp_cache_file.tmp_cache_node; b->file_pos = c->body_start; b->file_last = n->tmp_file_size; b->in_file = 1; b->last_buf = 0; b->last_in_chain = 1; b->file->fd = r->tmp_cache_file.file.fd; b->file->log = r->connection->log; out.buf = b; out.next = NULL; if(n->downloaded == 1) { b->last_buf = 1; ngx_http_output_filter(r, &out); ngx_http_finalize_request(r, NGX_OK); return NGX_OK; } return ngx_http_output_filter(r, &out); } Also I have a new request write handler : static void ngx_http_upstream_tmp_send_handler(ngx_http_request_t *r) { ngx_buf_t *b; ngx_chain_t out; ngx_http_cache_t *c; ngx_http_tmp_cache_node_t *n; c = r->cache; n = r->tmp_cache_file.tmp_cache_node; if(n->tmp_file_size == r->out->buf->file_pos) { return; } b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t)); if (b == NULL) { ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); return; } b->file = ngx_pcalloc(r->pool, sizeof(ngx_file_t)); if (b->file == NULL) { ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR); return; } b->file_pos = r->out->buf->file_pos; b->file_last = n->tmp_file_size; b->in_file = 1; b->last_buf = 0; b->last_in_chain = 1; b->file->fd = c->file.fd; b->file->name = c->file.name; b->file->log = r->connection->log; out.buf = b; out.next = NULL; if(n->downloaded == 1) { b->last_buf = 1; ngx_http_output_filter(r, &out); ngx_http_finalize_request(r, NGX_OK); return; } ngx_http_output_filter(r, &out); } I know the code is not optimal but its a try. So what I have. After ngx_http_tmp_send is called b->file_pos and b->file_last have right size. b->file_last is bigger than 1MB. The file is actually 1MB. It is in tmp dir I can see it. To the http client are sent ~114KB data and request write handler is called. In ngx_http_upstream_tmp_send_handler I checked r->out->buf->file_pos and it is moved with ~114KB but I did not find any way to send the rest of the data. Where could be my mistake? From piotr.sikora at frickle.com Thu Jan 19 06:40:57 2012 From: piotr.sikora at frickle.com (Piotr Sikora) Date: Thu, 19 Jan 2012 07:40:57 +0100 Subject: [PATCH] Nullify pc->connection in case of failure Message-ID: <44FEA9AE6E1B4E9FA35A60CAAF9AB5FF@Desktop> Hi, attached patch fixes issue when nginx would try to close the same socket twice in case of failure to add events on new upstream connection (first time in ngx_event_connect_peer() and then again in ngx_http_upstream_finalize_request()). Best regards, Piotr Sikora < piotr.sikora at frickle.com > --- src/event/ngx_event_connect.c.orig Wed Nov 25 18:03:59 2009 +++ src/event/ngx_event_connect.c Thu Jan 19 06:29:09 2012 @@ -247,6 +247,8 @@ failed: ngx_close_socket_n " failed"); } + pc->connection = NULL; + return NGX_ERROR; } From mdounin at mdounin.ru Thu Jan 19 15:46:55 2012 From: mdounin at mdounin.ru (Maxim Dounin) Date: Thu, 19 Jan 2012 19:46:55 +0400 Subject: [PATCH] Nullify pc->connection in case of failure In-Reply-To: <44FEA9AE6E1B4E9FA35A60CAAF9AB5FF@Desktop> References: <44FEA9AE6E1B4E9FA35A60CAAF9AB5FF@Desktop> Message-ID: <20120119154655.GP67687@mdounin.ru> Hello! On Thu, Jan 19, 2012 at 07:40:57AM +0100, Piotr Sikora wrote: > Hi, > attached patch fixes issue when nginx would try to close the same > socket twice in case of failure to add events on new upstream > connection (first time in ngx_event_connect_peer() and then again in > ngx_http_upstream_finalize_request()). > > Best regards, > Piotr Sikora < piotr.sikora at frickle.com > > > > --- src/event/ngx_event_connect.c.orig Wed Nov 25 18:03:59 2009 > +++ src/event/ngx_event_connect.c Thu Jan 19 06:29:09 2012 > @@ -247,6 +247,8 @@ failed: > ngx_close_socket_n " failed"); > } > > + pc->connection = NULL; > + > return NGX_ERROR; > } I tend to think this patch isn't enough, as it might not del events already added as a result. Probably better solution would be to just return NGX_ERROR if we've already set pc->connection, and let real ngx_close_connection() to do the work. Maxim Dounin From wandenberg at gmail.com Sun Jan 22 00:46:12 2012 From: wandenberg at gmail.com (Wandenberg Peixoto) Date: Sat, 21 Jan 2012 22:46:12 -0200 Subject: [PATCH] disable chunked filter don't change keepalive Message-ID: Hi, I don't know if there is some reason to disable keepalive if chunked filter is disabled. If don't have a reason for that I would ask to apply this patch to nginx core. --- src/http/modules/ngx_http_chunked_filter_module.c 2011-09-30 11:20:52.000000000 -0300 +++ src/http/modules/ngx_http_chunked_filter_module.c 2012-01-21 22:35:51.663785000 -0200 @@ -84,9 +84,6 @@ } ngx_http_set_ctx(r, ctx, ngx_http_chunked_filter_module); - - } else { - r->keepalive = 0; } } } I developed a module which delivery the same message to many users in a chunked connection, because of that I disable chunked filter and make the chunks myself to deliver to all users saving some memory and processing. Everything is working fine, but without this patch I can not use keepalive on my connections, because nginx chunked filter disable this feature when it is disabled. I hope you can accept this simple patch, regardless of my use case. Regards, Wandenberg -------------- next part -------------- An HTML attachment was scrubbed... URL: From piotr.sikora at frickle.com Sun Jan 22 09:40:34 2012 From: piotr.sikora at frickle.com (Piotr Sikora) Date: Sun, 22 Jan 2012 10:40:34 +0100 Subject: [PATCH] Nullify pc->connection in case of failure In-Reply-To: <20120119154655.GP67687@mdounin.ru> References: <44FEA9AE6E1B4E9FA35A60CAAF9AB5FF@Desktop> <20120119154655.GP67687@mdounin.ru> Message-ID: Hi Maxim, > I tend to think this patch isn't enough, as it might not del > events already added as a result. You're correct, as usual. I back-ported this from the module I'm working on (with single ngx_add_event() call) and apparently I didn't pay enough attention. > Probably better solution would be to just return NGX_ERROR if > we've already set pc->connection, and let real > ngx_close_connection() to do the work. Yes, this would indeed work better, but to be honest, I don't see much point in deferring ngx_close_connection() call. Personally, I prefer when failing function cleans-up after itself on failure if possible, so I would propose this patch instead: --- src/event/ngx_event_connect.c.orig Wed Nov 25 18:03:59 2009 +++ src/event/ngx_event_connect.c Sun Jan 22 09:22:31 2012 @@ -159,6 +159,9 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc) ngx_log_error(level, c->log, err, "connect() to %V failed", pc->name); + ngx_close_connection(c); + pc->connection = NULL; + return NGX_DECLINED; } } @@ -240,12 +243,8 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc) failed: - ngx_free_connection(c); - - if (ngx_close_socket(s) == -1) { - ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, - ngx_close_socket_n " failed"); - } + ngx_close_connection(c); + pc->connection = NULL; return NGX_ERROR; } Best regards, Piotr Sikora < piotr.sikora at frickle.com > From mdounin at mdounin.ru Sun Jan 22 21:29:31 2012 From: mdounin at mdounin.ru (Maxim Dounin) Date: Mon, 23 Jan 2012 01:29:31 +0400 Subject: [PATCH] disable chunked filter don't change keepalive In-Reply-To: References: Message-ID: <20120122212931.GE67687@mdounin.ru> Hello! On Sat, Jan 21, 2012 at 10:46:12PM -0200, Wandenberg Peixoto wrote: > I don't know if there is some reason to disable keepalive if chunked filter > is disabled. The reason is http protocol: to keep connections alive there should be either content length known or chunked encoding used. Maxim Dounin From wandenberg at gmail.com Sun Jan 22 21:38:22 2012 From: wandenberg at gmail.com (Wandenberg Peixoto) Date: Sun, 22 Jan 2012 19:38:22 -0200 Subject: [PATCH] disable chunked filter don't change keepalive In-Reply-To: <20120122212931.GE67687@mdounin.ru> References: <20120122212931.GE67687@mdounin.ru> Message-ID: Hello! Ok. But with this I can't use any other way to do a chunked connection. Is mandatory to use chunked filter. I'm doing a chunked encoding connection, only don't want to use this filter as I said before. Has any other way to use chunked connections without use chunked filter? Chunked filter could look to content-length instead only the enabled var? Or this be a responsible for header filter? Regards, Wandenberg On Sun, Jan 22, 2012 at 7:29 PM, Maxim Dounin wrote: > Hello! > > On Sat, Jan 21, 2012 at 10:46:12PM -0200, Wandenberg Peixoto wrote: > > > I don't know if there is some reason to disable keepalive if chunked > filter > > is disabled. > > The reason is http protocol: to keep connections alive there > should be either content length known or chunked encoding used. > > Maxim Dounin > > _______________________________________________ > nginx-devel mailing list > nginx-devel at nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-devel > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mdounin at mdounin.ru Sun Jan 22 22:05:12 2012 From: mdounin at mdounin.ru (Maxim Dounin) Date: Mon, 23 Jan 2012 02:05:12 +0400 Subject: [PATCH] disable chunked filter don't change keepalive In-Reply-To: References: <20120122212931.GE67687@mdounin.ru> Message-ID: <20120122220512.GH67687@mdounin.ru> Hello! On Sun, Jan 22, 2012 at 07:38:22PM -0200, Wandenberg Peixoto wrote: > Hello! > > Ok. But with this I can't use any other way to do a chunked connection. Is > mandatory to use chunked filter. > I'm doing a chunked encoding connection, only don't want to use this filter > as I said before. > > Has any other way to use chunked connections without use chunked filter? There is no one supported. I would recommend using chunked filter instead. Chunked encoding is a core part of http, and hence chunked filter is essential part of nginx's http functionality. Trying to replace it isn't supported and won't work well. (And yes, I know the basic and I believe the only reason why you are trying to avoid chunked filter: it used to consume memory for long-lived connections. This is no longer true since nginx 1.1.4, and I belive there is no real reason to avoid using it now.) Maxim Dounin > > Chunked filter could look to content-length instead only the enabled var? > > Or this be a responsible for header filter? > > Regards, > Wandenberg > > On Sun, Jan 22, 2012 at 7:29 PM, Maxim Dounin wrote: > > > Hello! > > > > On Sat, Jan 21, 2012 at 10:46:12PM -0200, Wandenberg Peixoto wrote: > > > > > I don't know if there is some reason to disable keepalive if chunked > > filter > > > is disabled. > > > > The reason is http protocol: to keep connections alive there > > should be either content length known or chunked encoding used. > > > > Maxim Dounin > > > > _______________________________________________ > > nginx-devel mailing list > > nginx-devel at nginx.org > > http://mailman.nginx.org/mailman/listinfo/nginx-devel > > > _______________________________________________ > nginx-devel mailing list > nginx-devel at nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-devel From q2011oct at gmail.com Mon Jan 23 06:20:42 2012 From: q2011oct at gmail.com (J.Q. S.) Date: Mon, 23 Jan 2012 01:20:42 -0500 Subject: Client disconnects Message-ID: Apologies for the resend, I last sent this during the holidays which was bad timing on my part. I've been working on a module to submit web requests to a backend server over UDP, and its been a good exercise in working with nginx internals. I could use some advice on dealing with client disconnects - using the proxy/upstream modules as models I see ngx_http_upstream_rd_check_broken_connection and ngx_http_upstream_wr_check_broken_connection being set as event handlers for the client connection, but I don't see the handlers put back or the original handlers being called. Wouldn't this interfere with keep-alive behavior on the client connection? I don't understand how this works completely. Are there other considerations I need to make when dealing with client disconnects? Anything I should do or avoid doing? All help appreciated! From mdounin at mdounin.ru Mon Jan 23 13:16:21 2012 From: mdounin at mdounin.ru (Maxim Dounin) Date: Mon, 23 Jan 2012 17:16:21 +0400 Subject: Client disconnects In-Reply-To: References: Message-ID: <20120123131621.GN67687@mdounin.ru> Hello! On Mon, Jan 23, 2012 at 01:20:42AM -0500, J.Q. S. wrote: > Apologies for the resend, I last sent this during the holidays which > was bad timing on my part. > > I've been working on a module to submit web requests to a backend > server over UDP, and its been a good exercise in working with nginx > internals. > > I could use some advice on dealing with client disconnects - using > the proxy/upstream modules as models I see > ngx_http_upstream_rd_check_broken_connection and > ngx_http_upstream_wr_check_broken_connection being set as event > handlers for the client connection, but I don't see the handlers put > back or the original handlers being called. Wouldn't this interfere > with keep-alive behavior on the client connection? I don't understand > how this works completely. The upstream module change request handlers, not connection ones. And appropriate request handlers will be set by ngx_http_set_write_handler() during request finalization. For client keepalive connections needed (connection) handlers will be set by ngx_http_set_keepalive(). See ngx_http_request.c for more details. Maxim Dounin From vbart at nginx.com Tue Jan 24 10:20:43 2012 From: vbart at nginx.com (vbart at nginx.com) Date: Tue, 24 Jan 2012 10:20:43 +0000 Subject: [nginx] svn commit: r4414 - trunk/src/core Message-ID: Author: vbart Date: 2012-01-24 10:20:42 +0000 (Tue, 24 Jan 2012) New Revision: 4414 Modified: trunk/src/core/ngx_regex.c Log: Fixed grammar in PCRE JIT error log message. Modified: trunk/src/core/ngx_regex.c =================================================================== --- trunk/src/core/ngx_regex.c 2012-01-18 15:07:43 UTC (rev 4413) +++ trunk/src/core/ngx_regex.c 2012-01-24 10:20:42 UTC (rev 4414) @@ -403,7 +403,7 @@ } #else ngx_conf_log_error(NGX_LOG_WARN, cf, 0, - "nginx was build without PCRE JIT support"); + "nginx was built without PCRE JIT support"); *fp = 0; #endif From ja.nginx at mailnull.com Tue Jan 24 22:02:13 2012 From: ja.nginx at mailnull.com (SamB) Date: Tue, 24 Jan 2012 23:02:13 +0100 Subject: [PATCH] add xslt_stylesheet_param directive Message-ID: Hi, next try... Attached patch adds xslt_stylesheet_param directive processing. This is equivalent of xslt parameter passed to xslt_stylesheet, but this works independently and globally. xslt config should be a bit simpler because 'common' xslt variables don't need to be repeated for each xslt_stylesheet. Comments/suggestion are welcomed. Thanks Sam -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: nginx-1.1.13-xslt-params.patch Type: application/octet-stream Size: 5352 bytes Desc: not available URL: From evilsocket at gmail.com Wed Jan 25 08:40:13 2012 From: evilsocket at gmail.com (Simone Margaritelli) Date: Wed, 25 Jan 2012 09:40:13 +0100 Subject: Module API and srv structure initialization. Message-ID: <3051C022-943E-400B-84E2-89128627987A@gmail.com> Hi guys, i'm new to this mailing list. I'm writing a nginx handler module and i need to load a file in a server directive inside the config, let's assume it's something like: server { ... mymodule-ruleset /etc/nginx/mymodule-rules.json; ... } So i have a server structure like: typedef struct { ... ngx_str_t ruleset; ... } ngx_mymodule_srv_conf_t; I initialize the ruleset attribute inside the merge_srv_conf handler: ngx_conf_merge_str_value( conf->ruleset_path, prev->ruleset_path, DEFAULT_RULESET_PATH ); ( Where DEFAULT_RULESET_PATH is a constant #defined my me ). The problem is, i have to load this file only once for server directive, but the user could ignore the mymodule-ruleset using its default value, so i can't use an handler to load it (it could be never called). Where's the best place to load this file? In the postconfiguration handler ? If so, how do i retrieve the srv_conf_t inside the postconfiguration handler ? Thanks for your time, i'm new to nginx developing and i'm finding some trouble to understand its structure. PS: I've already read the guides specified in the wiki, but there's nothing so specific. From mdounin at mdounin.ru Wed Jan 25 14:34:20 2012 From: mdounin at mdounin.ru (Maxim Dounin) Date: Wed, 25 Jan 2012 18:34:20 +0400 Subject: Module API and srv structure initialization. In-Reply-To: <3051C022-943E-400B-84E2-89128627987A@gmail.com> References: <3051C022-943E-400B-84E2-89128627987A@gmail.com> Message-ID: <20120125143420.GS67687@mdounin.ru> Hello! On Wed, Jan 25, 2012 at 09:40:13AM +0100, Simone Margaritelli wrote: > Hi guys, i'm new to this mailing list. > > I'm writing a nginx handler module and i need to load a file in > a server directive inside the config, let's assume it's > something like: > > server { > ... > mymodule-ruleset /etc/nginx/mymodule-rules.json; > ... > } > > So i have a server structure like: > > typedef struct { > ... > ngx_str_t ruleset; > ... > } > ngx_mymodule_srv_conf_t; > > I initialize the ruleset attribute inside the merge_srv_conf > handler: > > ngx_conf_merge_str_value( conf->ruleset_path, prev->ruleset_path, DEFAULT_RULESET_PATH ); > > ( Where DEFAULT_RULESET_PATH is a constant #defined my me ). > > The problem is, i have to load this file only once for server > directive, but the user could ignore the mymodule-ruleset using > its default value, so i can't use an handler to load it (it > could be never called). > > Where's the best place to load this file? In the > postconfiguration handler ? If so, how do i retrieve the > srv_conf_t inside the postconfiguration handler ? If you don't care much about the same file loaded multiple times if used in different server{}'s, easiest way is to load files in a merge server configuration handler. Postconfiguration handler may be used as well, but you need main config then, and reference files you need to load there. See e.g. access log module for an example of using of postconfiguration handler for a similar task (it uses postconfiguration handler to compile "combined" log format if it's used in config). Maxim Dounin > > Thanks for your time, i'm new to nginx developing and i'm > finding some trouble to understand its structure. > > PS: I've already read the guides specified in the wiki, but > there's nothing so specific. > > > _______________________________________________ > nginx-devel mailing list > nginx-devel at nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-devel From evilsocket at gmail.com Wed Jan 25 14:43:18 2012 From: evilsocket at gmail.com (Simone Margaritelli) Date: Wed, 25 Jan 2012 15:43:18 +0100 Subject: Module API and srv structure initialization. In-Reply-To: <20120125143420.GS67687@mdounin.ru> References: <3051C022-943E-400B-84E2-89128627987A@gmail.com> <20120125143420.GS67687@mdounin.ru> Message-ID: <98BADCD2-65C2-45A8-A9F5-54083DEFE3D5@gmail.com> I guess i'm gonna load it as a main configuration inside the post configuration handler, thanks so much :) -------------- next part -------------- An HTML attachment was scrubbed... URL: From q2011oct at gmail.com Thu Jan 26 05:29:28 2012 From: q2011oct at gmail.com (J.Q. S.) Date: Thu, 26 Jan 2012 00:29:28 -0500 Subject: Client disconnects In-Reply-To: <20120123131621.GN67687@mdounin.ru> References: <20120123131621.GN67687@mdounin.ru> Message-ID: hmm, so maybe then the question I should be asking is what should I do if I'm a module and I need to preform some action if the client connection disconnects before I complete my processing? Are there any considerations I should make in this situation? (i.e. like I have to finalize my own request or similar) On Mon, Jan 23, 2012 at 8:16 AM, Maxim Dounin wrote: > Hello! > > On Mon, Jan 23, 2012 at 01:20:42AM -0500, J.Q. S. wrote: > >> Apologies for the resend, I last sent this during the holidays which >> was bad timing on my part. >> >> I've been working on a module to submit web requests to a backend >> server over UDP, and its been a good exercise in working with nginx >> internals. >> >> I could use some advice on dealing with client disconnects - ?using >> the proxy/upstream modules as models I see >> ngx_http_upstream_rd_check_broken_connection and >> ngx_http_upstream_wr_check_broken_connection being set as event >> handlers for the client connection, but I don't see the handlers put >> back or the original handlers being called. Wouldn't this interfere >> with keep-alive behavior on the client connection? I don't understand >> how this works completely. > > The upstream module change request handlers, not connection ones. > And appropriate request handlers will be set by > ngx_http_set_write_handler() during request finalization. > > For client keepalive connections needed (connection) handlers will > be set by ngx_http_set_keepalive(). > > See ngx_http_request.c for more details. > > Maxim Dounin > > _______________________________________________ > nginx-devel mailing list > nginx-devel at nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-devel From mdounin at mdounin.ru Fri Jan 27 17:05:31 2012 From: mdounin at mdounin.ru (Maxim Dounin) Date: Fri, 27 Jan 2012 21:05:31 +0400 Subject: [PATCH] Removed ENGINE_load_builtin_engines() call Message-ID: # HG changeset patch # User Maxim Dounin # Date 1327678891 -14400 # Node ID deb5cebcec4d223930d544c6a2e539950663aa59 # Parent a2559e3cb5453fc754d16ffda06dcb9130f4802a Removed ENGINE_load_builtin_engines() call. It's already called by OPENSSL_config(). Calling it again causes some openssl engines (notably GOST) to corrupt memory, as they don't expect to be created more than once. diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c --- a/src/event/ngx_event_openssl.c +++ b/src/event/ngx_event_openssl.c @@ -91,8 +91,6 @@ ngx_ssl_init(ngx_log_t *log) SSL_library_init(); SSL_load_error_strings(); - ENGINE_load_builtin_engines(); - OpenSSL_add_all_algorithms(); ngx_ssl_connection_index = SSL_get_ex_new_index(0, NULL, NULL, NULL, NULL); From mdounin at mdounin.ru Fri Jan 27 17:06:58 2012 From: mdounin at mdounin.ru (Maxim Dounin) Date: Fri, 27 Jan 2012 21:06:58 +0400 Subject: [PATCH] Fixed AIO error handling on FreeBSD Message-ID: # HG changeset patch # User Maxim Dounin # Date 1327056488 -14400 # Node ID a2559e3cb5453fc754d16ffda06dcb9130f4802a # Parent d48f991d7bd065e29731c523e3b057c71da470ed Fixed AIO error handling on FreeBSD. The aio_return() must be called regardless of the error returned by aio_error(). Not calling it resulted in various problems up to segmentation faults (as AIO events are level-triggered and were reported again and again). Additionally, in "aio sendfile" case r->blocked was incremented in case of error returned from ngx_file_aio_read(), thus causing request hangs. diff --git a/src/http/ngx_http_copy_filter_module.c b/src/http/ngx_http_copy_filter_module.c --- a/src/http/ngx_http_copy_filter_module.c +++ b/src/http/ngx_http_copy_filter_module.c @@ -189,7 +189,7 @@ ngx_http_copy_filter(ngx_http_request_t rc = n; - if (file->aio) { + if (rc == NGX_AGAIN) { file->aio->data = r; file->aio->handler = ngx_http_copy_aio_sendfile_event_handler; diff --git a/src/os/unix/ngx_file_aio_read.c b/src/os/unix/ngx_file_aio_read.c --- a/src/os/unix/ngx_file_aio_read.c +++ b/src/os/unix/ngx_file_aio_read.c @@ -156,24 +156,15 @@ ngx_file_aio_result(ngx_file_t *file, ng return NGX_ERROR; } - if (n != 0) { - if (n == NGX_EINPROGRESS) { - if (ev->ready) { - ev->ready = 0; - ngx_log_error(NGX_LOG_ALERT, file->log, n, - "aio_read(\"%V\") still in progress", - &file->name); - } - - return NGX_AGAIN; + if (n == NGX_EINPROGRESS) { + if (ev->ready) { + ev->ready = 0; + ngx_log_error(NGX_LOG_ALERT, file->log, n, + "aio_read(\"%V\") still in progress", + &file->name); } - aio->err = n; - ev->ready = 0; - - ngx_log_error(NGX_LOG_CRIT, file->log, n, - "aio_read(\"%V\") failed", &file->name); - return NGX_ERROR; + return NGX_AGAIN; } n = aio_return(&aio->aiocb); @@ -181,9 +172,9 @@ ngx_file_aio_result(ngx_file_t *file, ng if (n == -1) { err = ngx_errno; aio->err = err; - ev->ready = 0; + ev->ready = 1; - ngx_log_error(NGX_LOG_ALERT, file->log, err, + ngx_log_error(NGX_LOG_CRIT, file->log, err, "aio_return(\"%V\") failed", &file->name); return NGX_ERROR; } From mdounin at mdounin.ru Mon Jan 30 07:38:27 2012 From: mdounin at mdounin.ru (mdounin at mdounin.ru) Date: Mon, 30 Jan 2012 07:38:27 +0000 Subject: [nginx] svn commit: r4415 - trunk/src/event Message-ID: <20120130073827.8F5233F9C29@mail.nginx.com> Author: mdounin Date: 2012-01-30 07:38:27 +0000 (Mon, 30 Jan 2012) New Revision: 4415 Log: Removed ENGINE_load_builtin_engines() call. It's already called by OPENSSL_config(). Calling it again causes some openssl engines (notably GOST) to corrupt memory, as they don't expect to be created more than once. Modified: trunk/src/event/ngx_event_openssl.c Modified: trunk/src/event/ngx_event_openssl.c =================================================================== --- trunk/src/event/ngx_event_openssl.c 2012-01-24 10:20:42 UTC (rev 4414) +++ trunk/src/event/ngx_event_openssl.c 2012-01-30 07:38:27 UTC (rev 4415) @@ -92,8 +92,6 @@ SSL_library_init(); SSL_load_error_strings(); - ENGINE_load_builtin_engines(); - OpenSSL_add_all_algorithms(); ngx_ssl_connection_index = SSL_get_ex_new_index(0, NULL, NULL, NULL, NULL); From mdounin at mdounin.ru Mon Jan 30 07:39:47 2012 From: mdounin at mdounin.ru (mdounin at mdounin.ru) Date: Mon, 30 Jan 2012 07:39:47 +0000 Subject: [nginx] svn commit: r4416 - in trunk/src: http os/unix Message-ID: <20120130073948.0884F3F9C29@mail.nginx.com> Author: mdounin Date: 2012-01-30 07:39:47 +0000 (Mon, 30 Jan 2012) New Revision: 4416 Log: Fixed AIO error handling on FreeBSD. The aio_return() must be called regardless of the error returned by aio_error(). Not calling it resulted in various problems up to segmentation faults (as AIO events are level-triggered and were reported again and again). Additionally, in "aio sendfile" case r->blocked was incremented in case of error returned from ngx_file_aio_read(), thus causing request hangs. Modified: trunk/src/http/ngx_http_copy_filter_module.c trunk/src/os/unix/ngx_file_aio_read.c Modified: trunk/src/http/ngx_http_copy_filter_module.c =================================================================== --- trunk/src/http/ngx_http_copy_filter_module.c 2012-01-30 07:38:27 UTC (rev 4415) +++ trunk/src/http/ngx_http_copy_filter_module.c 2012-01-30 07:39:47 UTC (rev 4416) @@ -190,7 +190,7 @@ rc = n; - if (file->aio) { + if (rc == NGX_AGAIN) { file->aio->data = r; file->aio->handler = ngx_http_copy_aio_sendfile_event_handler; Modified: trunk/src/os/unix/ngx_file_aio_read.c =================================================================== --- trunk/src/os/unix/ngx_file_aio_read.c 2012-01-30 07:38:27 UTC (rev 4415) +++ trunk/src/os/unix/ngx_file_aio_read.c 2012-01-30 07:39:47 UTC (rev 4416) @@ -157,24 +157,15 @@ return NGX_ERROR; } - if (n != 0) { - if (n == NGX_EINPROGRESS) { - if (ev->ready) { - ev->ready = 0; - ngx_log_error(NGX_LOG_ALERT, file->log, n, - "aio_read(\"%V\") still in progress", - &file->name); - } - - return NGX_AGAIN; + if (n == NGX_EINPROGRESS) { + if (ev->ready) { + ev->ready = 0; + ngx_log_error(NGX_LOG_ALERT, file->log, n, + "aio_read(\"%V\") still in progress", + &file->name); } - aio->err = n; - ev->ready = 0; - - ngx_log_error(NGX_LOG_CRIT, file->log, n, - "aio_read(\"%V\") failed", &file->name); - return NGX_ERROR; + return NGX_AGAIN; } n = aio_return(&aio->aiocb); @@ -182,9 +173,9 @@ if (n == -1) { err = ngx_errno; aio->err = err; - ev->ready = 0; + ev->ready = 1; - ngx_log_error(NGX_LOG_ALERT, file->log, err, + ngx_log_error(NGX_LOG_CRIT, file->log, err, "aio_return(\"%V\") failed", &file->name); return NGX_ERROR; } From vbart at nginx.com Mon Jan 30 09:02:30 2012 From: vbart at nginx.com (vbart at nginx.com) Date: Mon, 30 Jan 2012 09:02:30 +0000 Subject: [nginx] svn commit: r4417 - trunk/src/http/modules Message-ID: Author: vbart Date: 2012-01-30 09:02:29 +0000 (Mon, 30 Jan 2012) New Revision: 4417 Modified: trunk/src/http/modules/ngx_http_limit_req_module.c Log: Limit req: error messages fixed. Modified: trunk/src/http/modules/ngx_http_limit_req_module.c =================================================================== --- trunk/src/http/modules/ngx_http_limit_req_module.c 2012-01-30 07:39:47 UTC (rev 4416) +++ trunk/src/http/modules/ngx_http_limit_req_module.c 2012-01-30 09:02:29 UTC (rev 4417) @@ -691,8 +691,8 @@ if (ctx == NULL) { ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, - "no variable is defined for limit_req_zone \"%V\"", - &cmd->name); + "no variable is defined for %V \"%V\"", + &cmd->name, &name); return NGX_CONF_ERROR; } @@ -708,8 +708,8 @@ ctx = shm_zone->data; ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, - "limit_req_zone \"%V\" is already bound to variable \"%V\"", - &value[1], &ctx->var); + "%V \"%V\" is already bound to variable \"%V\"", + &cmd->name, &name, &ctx->var); return NGX_CONF_ERROR; } From vbart at nginx.com Mon Jan 30 09:26:08 2012 From: vbart at nginx.com (vbart at nginx.com) Date: Mon, 30 Jan 2012 09:26:08 +0000 Subject: [nginx] svn commit: r4418 - trunk/src/http/modules Message-ID: Author: vbart Date: 2012-01-30 09:26:08 +0000 (Mon, 30 Jan 2012) New Revision: 4418 Modified: trunk/src/http/modules/ngx_http_limit_req_module.c Log: Limit req: improved error handling when parsing "zone" parameter of "limit_req_zone" directive; minimum size of zone is increased. Previously an unsigned variable was used to keep the return value of ngx_parse_size() function, which led to an incorrect zone size if NGX_ERROR was returned. The new code has been taken from the "limit_conn_zone" directive. Modified: trunk/src/http/modules/ngx_http_limit_req_module.c =================================================================== --- trunk/src/http/modules/ngx_http_limit_req_module.c 2012-01-30 09:02:29 UTC (rev 4417) +++ trunk/src/http/modules/ngx_http_limit_req_module.c 2012-01-30 09:26:08 UTC (rev 4418) @@ -589,7 +589,8 @@ ngx_http_limit_req_zone(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { u_char *p; - size_t size, len; + size_t len; + ssize_t size; ngx_str_t *value, name, s; ngx_int_t rate, scale; ngx_uint_t i; @@ -612,25 +613,32 @@ p = (u_char *) ngx_strchr(name.data, ':'); - if (p) { - *p = '\0'; + if (p == NULL) { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "invalid zone size \"%V\"", &value[i]); + return NGX_CONF_ERROR; + } - name.len = p - name.data; + name.len = p - name.data; - p++; + s.data = p + 1; + s.len = value[i].data + value[i].len - s.data; - s.len = value[i].data + value[i].len - p; - s.data = p; + size = ngx_parse_size(&s); - size = ngx_parse_size(&s); - if (size > 8191) { - continue; - } + if (size == NGX_ERROR) { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "invalid zone size \"%V\"", &value[i]); + return NGX_CONF_ERROR; } - ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, - "invalid zone size \"%V\"", &value[i]); - return NGX_CONF_ERROR; + if (size < (ssize_t) (8 * ngx_pagesize)) { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "zone \"%V\" is too small", &value[i]); + return NGX_CONF_ERROR; + } + + continue; } if (ngx_strncmp(value[i].data, "rate=", 5) == 0) { @@ -682,7 +690,7 @@ return NGX_CONF_ERROR; } - if (name.len == 0 || size == 0) { + if (name.len == 0) { ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "\"%V\" must have \"zone\" parameter", &cmd->name); From vbart at nginx.com Mon Jan 30 09:41:49 2012 From: vbart at nginx.com (vbart at nginx.com) Date: Mon, 30 Jan 2012 09:41:49 +0000 Subject: [nginx] svn commit: r4419 - trunk/src/http/modules Message-ID: Author: vbart Date: 2012-01-30 09:41:49 +0000 (Mon, 30 Jan 2012) New Revision: 4419 Modified: trunk/src/http/modules/ngx_http_limit_req_module.c Log: Limit req: allocation and initialization of a new node moved to the lookup function. No functional changes. Modified: trunk/src/http/modules/ngx_http_limit_req_module.c =================================================================== --- trunk/src/http/modules/ngx_http_limit_req_module.c 2012-01-30 09:26:08 UTC (rev 4418) +++ trunk/src/http/modules/ngx_http_limit_req_module.c 2012-01-30 09:41:49 UTC (rev 4419) @@ -136,15 +136,12 @@ static ngx_int_t ngx_http_limit_req_handler(ngx_http_request_t *r) { - size_t len, n; + size_t len; uint32_t hash; ngx_int_t rc; ngx_uint_t excess; - ngx_time_t *tp; - ngx_rbtree_node_t *node; ngx_http_variable_value_t *vv; ngx_http_limit_req_ctx_t *ctx; - ngx_http_limit_req_node_t *lr; ngx_http_limit_req_conf_t *lrcf; if (r->main->limit_req_set) { @@ -189,58 +186,24 @@ rc = ngx_http_limit_req_lookup(lrcf, hash, vv->data, len, &excess); + ngx_shmtx_unlock(&ctx->shpool->mutex); + ngx_log_debug3(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "limit_req: %i %ui.%03ui", rc, excess / 1000, excess % 1000); - if (rc == NGX_DECLINED) { - - n = offsetof(ngx_rbtree_node_t, color) - + offsetof(ngx_http_limit_req_node_t, data) - + len; - - node = ngx_slab_alloc_locked(ctx->shpool, n); - if (node == NULL) { - - ngx_http_limit_req_expire(ctx, 0); - - node = ngx_slab_alloc_locked(ctx->shpool, n); - if (node == NULL) { - ngx_shmtx_unlock(&ctx->shpool->mutex); - return NGX_HTTP_SERVICE_UNAVAILABLE; - } - } - - lr = (ngx_http_limit_req_node_t *) &node->color; - - node->key = hash; - lr->len = (u_char) len; - - tp = ngx_timeofday(); - lr->last = (ngx_msec_t) (tp->sec * 1000 + tp->msec); - - lr->excess = 0; - ngx_memcpy(lr->data, vv->data, len); - - ngx_rbtree_insert(&ctx->sh->rbtree, node); - - ngx_queue_insert_head(&ctx->sh->queue, &lr->queue); - - ngx_shmtx_unlock(&ctx->shpool->mutex); - - return NGX_DECLINED; - } - - ngx_shmtx_unlock(&ctx->shpool->mutex); - if (rc == NGX_OK) { return NGX_DECLINED; } - if (rc == NGX_BUSY) { - ngx_log_error(lrcf->limit_log_level, r->connection->log, 0, - "limiting requests, excess: %ui.%03ui by zone \"%V\"", - excess / 1000, excess % 1000, &lrcf->shm_zone->shm.name); + if (rc == NGX_BUSY || rc == NGX_ERROR) { + if (rc == NGX_BUSY) { + ngx_log_error(lrcf->limit_log_level, r->connection->log, 0, + "limiting requests, excess: %ui.%03ui by zone \"%V\"", + excess / 1000, excess % 1000, + &lrcf->shm_zone->shm.name); + } + return NGX_HTTP_SERVICE_UNAVAILABLE; } @@ -345,6 +308,7 @@ ngx_http_limit_req_lookup(ngx_http_limit_req_conf_t *lrcf, ngx_uint_t hash, u_char *data, size_t len, ngx_uint_t *ep) { + size_t size; ngx_int_t rc, excess; ngx_time_t *tp; ngx_msec_t now; @@ -353,6 +317,9 @@ ngx_http_limit_req_ctx_t *ctx; ngx_http_limit_req_node_t *lr; + tp = ngx_timeofday(); + now = (ngx_msec_t) (tp->sec * 1000 + tp->msec); + ctx = lrcf->shm_zone->data; node = ctx->sh->rbtree.root; @@ -381,9 +348,6 @@ ngx_queue_remove(&lr->queue); ngx_queue_insert_head(&ctx->sh->queue, &lr->queue); - tp = ngx_timeofday(); - - now = (ngx_msec_t) (tp->sec * 1000 + tp->msec); ms = (ngx_msec_int_t) (now - lr->last); excess = lr->excess - ctx->rate * ngx_abs(ms) / 1000 + 1000; @@ -417,7 +381,36 @@ *ep = 0; - return NGX_DECLINED; + size = offsetof(ngx_rbtree_node_t, color) + + offsetof(ngx_http_limit_req_node_t, data) + + len; + + node = ngx_slab_alloc_locked(ctx->shpool, size); + + if (node == NULL) { + ngx_http_limit_req_expire(ctx, 0); + + node = ngx_slab_alloc_locked(ctx->shpool, size); + if (node == NULL) { + return NGX_ERROR; + } + } + + node->key = hash; + + ngx_rbtree_insert(&ctx->sh->rbtree, node); + + lr = (ngx_http_limit_req_node_t *) &node->color; + + ngx_queue_insert_head(&ctx->sh->queue, &lr->queue); + + lr->len = (u_char) len; + lr->excess = 0; + lr->last = now; + + ngx_memcpy(lr->data, data, len); + + return NGX_OK; } From vbart at nginx.com Mon Jan 30 10:01:39 2012 From: vbart at nginx.com (vbart at nginx.com) Date: Mon, 30 Jan 2012 10:01:39 +0000 Subject: [nginx] svn commit: r4420 - trunk/src/http/modules Message-ID: Author: vbart Date: 2012-01-30 10:01:39 +0000 (Mon, 30 Jan 2012) New Revision: 4420 Modified: trunk/src/http/modules/ngx_http_limit_req_module.c Log: Limit req: number of cleanup calls reduced. Doing a cleanup before every lookup seems to be too aggressive. It can lead to premature removal of the nodes still usable, which increases the amount of work under a mutex lock and therefore decreases performance. In order to improve cleanup behavior, cleanup function call has been moved right before the allocation of a new node. Modified: trunk/src/http/modules/ngx_http_limit_req_module.c =================================================================== --- trunk/src/http/modules/ngx_http_limit_req_module.c 2012-01-30 09:41:49 UTC (rev 4419) +++ trunk/src/http/modules/ngx_http_limit_req_module.c 2012-01-30 10:01:39 UTC (rev 4420) @@ -182,8 +182,6 @@ ngx_shmtx_lock(&ctx->shpool->mutex); - ngx_http_limit_req_expire(ctx, 1); - rc = ngx_http_limit_req_lookup(lrcf, hash, vv->data, len, &excess); ngx_shmtx_unlock(&ctx->shpool->mutex); @@ -385,6 +383,8 @@ + offsetof(ngx_http_limit_req_node_t, data) + len; + ngx_http_limit_req_expire(ctx, 1); + node = ngx_slab_alloc_locked(ctx->shpool, size); if (node == NULL) { From vbart at nginx.com Mon Jan 30 10:17:57 2012 From: vbart at nginx.com (vbart at nginx.com) Date: Mon, 30 Jan 2012 10:17:57 +0000 Subject: [nginx] svn commit: r4421 - trunk/src/http/modules Message-ID: Author: vbart Date: 2012-01-30 10:17:56 +0000 (Mon, 30 Jan 2012) New Revision: 4421 Modified: trunk/src/http/modules/ngx_http_limit_req_module.c Log: Limit req: support for multiple "limit_req" limits. Modified: trunk/src/http/modules/ngx_http_limit_req_module.c =================================================================== --- trunk/src/http/modules/ngx_http_limit_req_module.c 2012-01-30 10:01:39 UTC (rev 4420) +++ trunk/src/http/modules/ngx_http_limit_req_module.c 2012-01-30 10:17:56 UTC (rev 4421) @@ -18,6 +18,7 @@ ngx_msec_t last; /* integer value, 1 corresponds to 0.001 r/s */ ngx_uint_t excess; + ngx_uint_t count; u_char data[1]; } ngx_http_limit_req_node_t; @@ -36,6 +37,7 @@ ngx_uint_t rate; ngx_int_t index; ngx_str_t var; + ngx_http_limit_req_node_t *node; } ngx_http_limit_req_ctx_t; @@ -43,16 +45,23 @@ ngx_shm_zone_t *shm_zone; /* integer value, 1 corresponds to 0.001 r/s */ ngx_uint_t burst; + ngx_uint_t nodelay; /* unsigned nodelay:1 */ +} ngx_http_limit_req_limit_t; + + +typedef struct { + ngx_array_t limits; ngx_uint_t limit_log_level; ngx_uint_t delay_log_level; - - ngx_uint_t nodelay; /* unsigned nodelay:1 */ } ngx_http_limit_req_conf_t; static void ngx_http_limit_req_delay(ngx_http_request_t *r); -static ngx_int_t ngx_http_limit_req_lookup(ngx_http_limit_req_conf_t *lrcf, - ngx_uint_t hash, u_char *data, size_t len, ngx_uint_t *ep); +static ngx_int_t ngx_http_limit_req_lookup(ngx_http_limit_req_limit_t *limit, + ngx_uint_t hash, u_char *data, size_t len, ngx_uint_t *ep, + ngx_uint_t account); +static ngx_msec_t ngx_http_limit_req_account(ngx_http_limit_req_limit_t *limits, + ngx_uint_t n, ngx_uint_t *ep, ngx_http_limit_req_limit_t **limit); static void ngx_http_limit_req_expire(ngx_http_limit_req_ctx_t *ctx, ngx_uint_t n); @@ -136,84 +145,120 @@ static ngx_int_t ngx_http_limit_req_handler(ngx_http_request_t *r) { - size_t len; - uint32_t hash; - ngx_int_t rc; - ngx_uint_t excess; - ngx_http_variable_value_t *vv; - ngx_http_limit_req_ctx_t *ctx; - ngx_http_limit_req_conf_t *lrcf; + size_t len; + uint32_t hash; + ngx_int_t rc; + ngx_uint_t n, excess; + ngx_msec_t delay; + ngx_http_variable_value_t *vv; + ngx_http_limit_req_ctx_t *ctx; + ngx_http_limit_req_conf_t *lrcf; + ngx_http_limit_req_limit_t *limit, *limits; if (r->main->limit_req_set) { return NGX_DECLINED; } lrcf = ngx_http_get_module_loc_conf(r, ngx_http_limit_req_module); + limits = lrcf->limits.elts; - if (lrcf->shm_zone == NULL) { - return NGX_DECLINED; - } + excess = 0; - ctx = lrcf->shm_zone->data; + rc = NGX_DECLINED; - vv = ngx_http_get_indexed_variable(r, ctx->index); + for (n = 0; n < lrcf->limits.nelts; n++) { - if (vv == NULL || vv->not_found) { - return NGX_DECLINED; - } + limit = &limits[n]; - len = vv->len; + ctx = limit->shm_zone->data; - if (len == 0) { - return NGX_DECLINED; - } + vv = ngx_http_get_indexed_variable(r, ctx->index); - if (len > 65535) { - ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, - "the value of the \"%V\" variable " - "is more than 65535 bytes: \"%v\"", - &ctx->var, vv); - return NGX_DECLINED; - } + if (vv == NULL || vv->not_found) { + continue; + } - r->main->limit_req_set = 1; + len = vv->len; - hash = ngx_crc32_short(vv->data, len); + if (len == 0) { + continue; + } - ngx_shmtx_lock(&ctx->shpool->mutex); + if (len > 65535) { + ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, + "the value of the \"%V\" variable " + "is more than 65535 bytes: \"%v\"", + &ctx->var, vv); + continue; + } - rc = ngx_http_limit_req_lookup(lrcf, hash, vv->data, len, &excess); + hash = ngx_crc32_short(vv->data, len); - ngx_shmtx_unlock(&ctx->shpool->mutex); + ngx_shmtx_lock(&ctx->shpool->mutex); - ngx_log_debug3(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, - "limit_req: %i %ui.%03ui", rc, excess / 1000, excess % 1000); + rc = ngx_http_limit_req_lookup(limit, hash, vv->data, len, &excess, + (n == lrcf->limits.nelts - 1)); - if (rc == NGX_OK) { + ngx_shmtx_unlock(&ctx->shpool->mutex); + + ngx_log_debug4(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, + "limit_req[%ui]: %i %ui.%03ui", + n, rc, excess / 1000, excess % 1000); + + if (rc != NGX_AGAIN) { + break; + } + } + + if (rc == NGX_DECLINED) { return NGX_DECLINED; } + r->main->limit_req_set = 1; + if (rc == NGX_BUSY || rc == NGX_ERROR) { if (rc == NGX_BUSY) { ngx_log_error(lrcf->limit_log_level, r->connection->log, 0, "limiting requests, excess: %ui.%03ui by zone \"%V\"", excess / 1000, excess % 1000, - &lrcf->shm_zone->shm.name); + &limit->shm_zone->shm.name); } + while (n--) { + ctx = limits[n].shm_zone->data; + + if (ctx->node == NULL) { + continue; + } + + ngx_shmtx_lock(&ctx->shpool->mutex); + + ctx->node->count--; + + ngx_shmtx_unlock(&ctx->shpool->mutex); + + ctx->node = NULL; + } + return NGX_HTTP_SERVICE_UNAVAILABLE; } - /* rc == NGX_AGAIN */ + /* rc == NGX_AGAIN || rc == NGX_OK */ - if (lrcf->nodelay) { + if (rc == NGX_AGAIN) { + excess = 0; + } + + delay = ngx_http_limit_req_account(limits, n, &excess, &limit); + + if (!delay) { return NGX_DECLINED; } ngx_log_error(lrcf->delay_log_level, r->connection->log, 0, "delaying request, excess: %ui.%03ui, by zone \"%V\"", - excess / 1000, excess % 1000, &lrcf->shm_zone->shm.name); + excess / 1000, excess % 1000, &limit->shm_zone->shm.name); if (ngx_handle_read_event(r->connection->read, 0) != NGX_OK) { return NGX_HTTP_INTERNAL_SERVER_ERROR; @@ -221,8 +266,7 @@ r->read_event_handler = ngx_http_test_reading; r->write_event_handler = ngx_http_limit_req_delay; - ngx_add_timer(r->connection->write, - (ngx_msec_t) excess * 1000 / ctx->rate); + ngx_add_timer(r->connection->write, delay); return NGX_AGAIN; } @@ -303,8 +347,8 @@ static ngx_int_t -ngx_http_limit_req_lookup(ngx_http_limit_req_conf_t *lrcf, ngx_uint_t hash, - u_char *data, size_t len, ngx_uint_t *ep) +ngx_http_limit_req_lookup(ngx_http_limit_req_limit_t *limit, ngx_uint_t hash, + u_char *data, size_t len, ngx_uint_t *ep, ngx_uint_t account) { size_t size; ngx_int_t rc, excess; @@ -318,7 +362,7 @@ tp = ngx_timeofday(); now = (ngx_msec_t) (tp->sec * 1000 + tp->msec); - ctx = lrcf->shm_zone->data; + ctx = limit->shm_zone->data; node = ctx->sh->rbtree.root; sentinel = ctx->sh->rbtree.sentinel; @@ -356,18 +400,21 @@ *ep = excess; - if ((ngx_uint_t) excess > lrcf->burst) { + if ((ngx_uint_t) excess > limit->burst) { return NGX_BUSY; } - lr->excess = excess; - lr->last = now; - - if (excess) { - return NGX_AGAIN; + if (account) { + lr->excess = excess; + lr->last = now; + return NGX_OK; } - return NGX_OK; + lr->count++; + + ctx->node = lr; + + return NGX_AGAIN; } node = (rc < 0) ? node->left : node->right; @@ -406,14 +453,91 @@ lr->len = (u_char) len; lr->excess = 0; - lr->last = now; ngx_memcpy(lr->data, data, len); - return NGX_OK; + if (account) { + lr->last = now; + lr->count = 0; + return NGX_OK; + } + + lr->last = 0; + lr->count = 1; + + ctx->node = lr; + + return NGX_AGAIN; } +static ngx_msec_t +ngx_http_limit_req_account(ngx_http_limit_req_limit_t *limits, ngx_uint_t n, + ngx_uint_t *ep, ngx_http_limit_req_limit_t **limit) +{ + ngx_int_t excess; + ngx_time_t *tp; + ngx_msec_t now, delay, max_delay; + ngx_msec_int_t ms; + ngx_http_limit_req_ctx_t *ctx; + ngx_http_limit_req_node_t *lr; + + excess = *ep; + + if (excess == 0 || (*limit)->nodelay) { + max_delay = 0; + + } else { + ctx = (*limit)->shm_zone->data; + max_delay = excess * 1000 / ctx->rate; + } + + while (n--) { + ctx = limits[n].shm_zone->data; + lr = ctx->node; + + if (lr == NULL) { + continue; + } + + ngx_shmtx_lock(&ctx->shpool->mutex); + + tp = ngx_timeofday(); + + now = (ngx_msec_t) (tp->sec * 1000 + tp->msec); + ms = (ngx_msec_int_t) (now - lr->last); + + excess = lr->excess - ctx->rate * ngx_abs(ms) / 1000 + 1000; + + if (excess < 0) { + excess = 0; + } + + lr->last = now; + lr->excess = excess; + lr->count--; + + ngx_shmtx_unlock(&ctx->shpool->mutex); + + ctx->node = NULL; + + if (limits[n].nodelay) { + continue; + } + + delay = excess * 1000 / ctx->rate; + + if (delay > max_delay) { + max_delay = delay; + *ep = excess; + *limit = &limits[n]; + } + } + + return max_delay; +} + + static void ngx_http_limit_req_expire(ngx_http_limit_req_ctx_t *ctx, ngx_uint_t n) { @@ -445,6 +569,16 @@ lr = ngx_queue_data(q, ngx_http_limit_req_node_t, queue); + if (lr->count) { + + /* + * There is not much sense in looking further, + * because we bump nodes on the lookup stage. + */ + + return; + } + if (n++ != 0) { ms = (ngx_msec_int_t) (now - lr->last); @@ -545,9 +679,7 @@ /* * set by ngx_pcalloc(): * - * conf->shm_zone = NULL; - * conf->burst = 0; - * conf->nodelay = 0; + * conf->limits.elts = NULL; */ conf->limit_log_level = NGX_CONF_UNSET_UINT; @@ -562,10 +694,8 @@ ngx_http_limit_req_conf_t *prev = parent; ngx_http_limit_req_conf_t *conf = child; - if (conf->shm_zone == NULL) { - conf->shm_zone = prev->shm_zone; - conf->burst = prev->burst; - conf->nodelay = prev->nodelay; + if (conf->limits.elts == NULL) { + conf->limits = prev->limits; } ngx_conf_merge_uint_value(conf->limit_log_level, prev->limit_log_level, @@ -726,17 +856,17 @@ { ngx_http_limit_req_conf_t *lrcf = conf; - ngx_int_t burst; - ngx_str_t *value, s; - ngx_uint_t i; + ngx_int_t burst; + ngx_str_t *value, s; + ngx_uint_t i, nodelay; + ngx_shm_zone_t *shm_zone; + ngx_http_limit_req_limit_t *limit, *limits; - if (lrcf->shm_zone) { - return "is duplicate"; - } - value = cf->args->elts; + shm_zone = NULL; burst = 0; + nodelay = 0; for (i = 1; i < cf->args->nelts; i++) { @@ -745,9 +875,9 @@ s.len = value[i].len - 5; s.data = value[i].data + 5; - lrcf->shm_zone = ngx_shared_memory_add(cf, &s, 0, - &ngx_http_limit_req_module); - if (lrcf->shm_zone == NULL) { + shm_zone = ngx_shared_memory_add(cf, &s, 0, + &ngx_http_limit_req_module); + if (shm_zone == NULL) { return NGX_CONF_ERROR; } @@ -767,7 +897,7 @@ } if (ngx_strncmp(value[i].data, "nodelay", 7) == 0) { - lrcf->nodelay = 1; + nodelay = 1; continue; } @@ -776,22 +906,43 @@ return NGX_CONF_ERROR; } - if (lrcf->shm_zone == NULL) { + if (shm_zone == NULL) { ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "\"%V\" must have \"zone\" parameter", &cmd->name); return NGX_CONF_ERROR; } - if (lrcf->shm_zone->data == NULL) { + if (shm_zone->data == NULL) { ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "unknown limit_req_zone \"%V\"", - &lrcf->shm_zone->shm.name); + &shm_zone->shm.name); return NGX_CONF_ERROR; } - lrcf->burst = burst * 1000; + limits = lrcf->limits.elts; + if (limits == NULL) { + if (ngx_array_init(&lrcf->limits, cf->pool, 1, + sizeof(ngx_http_limit_req_limit_t)) + != NGX_OK) + { + return NGX_CONF_ERROR; + } + } + + for (i = 0; i < lrcf->limits.nelts; i++) { + if (shm_zone == limits[i].shm_zone) { + return "is duplicate"; + } + } + + limit = ngx_array_push(&lrcf->limits); + + limit->shm_zone = shm_zone; + limit->burst = burst * 1000; + limit->nodelay = nodelay; + return NGX_CONF_OK; } From mdounin at mdounin.ru Mon Jan 30 11:12:53 2012 From: mdounin at mdounin.ru (mdounin at mdounin.ru) Date: Mon, 30 Jan 2012 11:12:53 +0000 Subject: [nginx] svn commit: r4422 - trunk/src/event Message-ID: <20120130111253.4CE9A3F9C25@mail.nginx.com> Author: mdounin Date: 2012-01-30 11:12:52 +0000 (Mon, 30 Jan 2012) New Revision: 4422 Log: Fixed error handling in ngx_event_connect_peer(). Previously if ngx_add_event() failed a connection was freed two times (once in the ngx_event_connect_peer(), and again by a caller) as pc->connection was left set. Fix is to always use ngx_close_connection() to close connection properly and set pc->connection to NULL on errors. Patch by Piotr Sikora. Modified: trunk/src/event/ngx_event_connect.c Modified: trunk/src/event/ngx_event_connect.c =================================================================== --- trunk/src/event/ngx_event_connect.c 2012-01-30 10:17:56 UTC (rev 4421) +++ trunk/src/event/ngx_event_connect.c 2012-01-30 11:12:52 UTC (rev 4422) @@ -160,6 +160,9 @@ ngx_log_error(level, c->log, err, "connect() to %V failed", pc->name); + ngx_close_connection(c); + pc->connection = NULL; + return NGX_DECLINED; } } @@ -241,13 +244,9 @@ failed: - ngx_free_connection(c); + ngx_close_connection(c); + pc->connection = NULL; - if (ngx_close_socket(s) == -1) { - ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, - ngx_close_socket_n " failed"); - } - return NGX_ERROR; } From mdounin at mdounin.ru Mon Jan 30 11:17:55 2012 From: mdounin at mdounin.ru (Maxim Dounin) Date: Mon, 30 Jan 2012 15:17:55 +0400 Subject: [PATCH] Nullify pc->connection in case of failure In-Reply-To: References: <44FEA9AE6E1B4E9FA35A60CAAF9AB5FF@Desktop> <20120119154655.GP67687@mdounin.ru> Message-ID: <20120130111755.GT67687@mdounin.ru> Hello! On Sun, Jan 22, 2012 at 10:40:34AM +0100, Piotr Sikora wrote: > Hi Maxim, > > >I tend to think this patch isn't enough, as it might not del > >events already added as a result. > > You're correct, as usual. > > I back-ported this from the module I'm working on (with single > ngx_add_event() call) and apparently I didn't pay enough attention. > > >Probably better solution would be to just return NGX_ERROR if > >we've already set pc->connection, and let real > >ngx_close_connection() to do the work. > > Yes, this would indeed work better, but to be honest, I don't see > much point in deferring ngx_close_connection() call. Personally, I > prefer when failing function cleans-up after itself on failure if > possible, so I would propose this patch instead: > > --- src/event/ngx_event_connect.c.orig Wed Nov 25 18:03:59 2009 > +++ src/event/ngx_event_connect.c Sun Jan 22 09:22:31 2012 > @@ -159,6 +159,9 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc) > ngx_log_error(level, c->log, err, "connect() to %V failed", > pc->name); > > + ngx_close_connection(c); > + pc->connection = NULL; > + > return NGX_DECLINED; > } > } > @@ -240,12 +243,8 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc) > > failed: > > - ngx_free_connection(c); > - > - if (ngx_close_socket(s) == -1) { > - ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno, > - ngx_close_socket_n " failed"); > - } > + ngx_close_connection(c); > + pc->connection = NULL; > > return NGX_ERROR; > } Commited, thanks. Maxim Dounin From vbart at nginx.com Mon Jan 30 11:22:57 2012 From: vbart at nginx.com (vbart at nginx.com) Date: Mon, 30 Jan 2012 11:22:57 +0000 Subject: [nginx] svn commit: r4423 - trunk/src/http/modules Message-ID: Author: vbart Date: 2012-01-30 11:22:56 +0000 (Mon, 30 Jan 2012) New Revision: 4423 Modified: trunk/src/http/modules/ngx_http_proxy_module.c Log: Fixed proxy_redirect off inheritance. Example configuration to reproduce: server { proxy_redirect off; location / { proxy_pass http://localhost:8000; proxy_redirect http://localhost:8000/ /; location ~ \.php$ { proxy_pass http://localhost:8000; # proxy_redirect must be inherited from the level above, # but instead it was switched off here } } } Modified: trunk/src/http/modules/ngx_http_proxy_module.c =================================================================== --- trunk/src/http/modules/ngx_http_proxy_module.c 2012-01-30 11:12:52 UTC (rev 4422) +++ trunk/src/http/modules/ngx_http_proxy_module.c 2012-01-30 11:22:56 UTC (rev 4423) @@ -3292,6 +3292,8 @@ return NGX_CONF_OK; } + plcf->redirect = 1; + value = cf->args->elts; if (cf->args->nelts == 2) { From vbart at nginx.com Mon Jan 30 12:53:58 2012 From: vbart at nginx.com (vbart at nginx.com) Date: Mon, 30 Jan 2012 12:53:58 +0000 Subject: [nginx] svn commit: r4424 - trunk/src/core Message-ID: Author: vbart Date: 2012-01-30 12:53:57 +0000 (Mon, 30 Jan 2012) New Revision: 4424 Modified: trunk/src/core/ngx_regex.c Log: Fixed memory leak on HUP signal when PCRE JIT was used. The PCRE JIT compiler uses mmap to allocate memory for its executable codes, so we have to explicitly call the pcre_free_study() function to free this memory. Modified: trunk/src/core/ngx_regex.c =================================================================== --- trunk/src/core/ngx_regex.c 2012-01-30 11:22:56 UTC (rev 4423) +++ trunk/src/core/ngx_regex.c 2012-01-30 12:53:57 UTC (rev 4424) @@ -16,6 +16,9 @@ static void * ngx_libc_cdecl ngx_regex_malloc(size_t size); static void ngx_libc_cdecl ngx_regex_free(void *p); +#if (NGX_HAVE_PCRE_JIT) +static void ngx_pcre_free_studies(void *data); +#endif static ngx_int_t ngx_regex_module_init(ngx_cycle_t *cycle); @@ -274,6 +277,41 @@ } +#if (NGX_HAVE_PCRE_JIT) + +static void +ngx_pcre_free_studies(void *data) +{ + ngx_list_t *studies = data; + + ngx_uint_t i; + ngx_list_part_t *part; + ngx_regex_elt_t *elts; + + part = &studies->part; + elts = part->elts; + + for (i = 0 ; /* void */ ; i++) { + + if (i >= part->nelts) { + if (part->next == NULL) { + break; + } + + part = part->next; + elts = part->elts; + i = 0; + } + + if (elts[i].regex->extra != NULL) { + pcre_free_study(elts[i].regex->extra); + } + } +} + +#endif + + static ngx_int_t ngx_regex_module_init(ngx_cycle_t *cycle) { @@ -287,12 +325,27 @@ #if (NGX_HAVE_PCRE_JIT) { - ngx_regex_conf_t *rcf; + ngx_regex_conf_t *rcf; + ngx_pool_cleanup_t *cln; rcf = (ngx_regex_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_regex_module); if (rcf->pcre_jit) { opt = PCRE_STUDY_JIT_COMPILE; + + /* + * The PCRE JIT compiler uses mmap for its executable codes, so we + * have to explicitly call the pcre_free_study() function to free + * this memory. + */ + + cln = ngx_pool_cleanup_add(cycle->pool, 0); + if (cln == NULL) { + return NGX_ERROR; + } + + cln->handler = ngx_pcre_free_studies; + cln->data = ngx_pcre_studies; } } #endif From mdounin at mdounin.ru Mon Jan 30 13:19:25 2012 From: mdounin at mdounin.ru (mdounin at mdounin.ru) Date: Mon, 30 Jan 2012 13:19:25 +0000 Subject: [nginx] svn commit: r4425 - trunk/src/http/modules Message-ID: <20120130131925.E4EAA3F9C27@mail.nginx.com> Author: mdounin Date: 2012-01-30 13:19:25 +0000 (Mon, 30 Jan 2012) New Revision: 4425 Log: Limit req: unbreak compilation with MSVC. Modified: trunk/src/http/modules/ngx_http_limit_req_module.c Modified: trunk/src/http/modules/ngx_http_limit_req_module.c =================================================================== --- trunk/src/http/modules/ngx_http_limit_req_module.c 2012-01-30 12:53:57 UTC (rev 4424) +++ trunk/src/http/modules/ngx_http_limit_req_module.c 2012-01-30 13:19:25 UTC (rev 4425) @@ -166,6 +166,10 @@ rc = NGX_DECLINED; +#if (NGX_SUPPRESS_WARN) + limit = NULL; +#endif + for (n = 0; n < lrcf->limits.nelts; n++) { limit = &limits[n]; From mdounin at mdounin.ru Mon Jan 30 13:47:04 2012 From: mdounin at mdounin.ru (mdounin at mdounin.ru) Date: Mon, 30 Jan 2012 13:47:04 +0000 Subject: [nginx] svn commit: r4426 - trunk/misc Message-ID: <20120130134704.DE37B3F9DFD@mail.nginx.com> Author: mdounin Date: 2012-01-30 13:47:03 +0000 (Mon, 30 Jan 2012) New Revision: 4426 Log: Update OpenSSL and PCRE used for win32 builds. Modified: trunk/misc/GNUmakefile Modified: trunk/misc/GNUmakefile =================================================================== --- trunk/misc/GNUmakefile 2012-01-30 13:19:25 UTC (rev 4425) +++ trunk/misc/GNUmakefile 2012-01-30 13:47:03 UTC (rev 4426) @@ -6,9 +6,9 @@ REPO = $(shell svn info | sed -n 's/^Repository Root: //p') OBJS = objs.msvc8 -OPENSSL = openssl-1.0.0f +OPENSSL = openssl-1.0.0g ZLIB = zlib-1.2.5 -PCRE = pcre-8.12 +PCRE = pcre-8.21 release: From mdounin at mdounin.ru Mon Jan 30 13:52:10 2012 From: mdounin at mdounin.ru (mdounin at mdounin.ru) Date: Mon, 30 Jan 2012 13:52:10 +0000 Subject: [nginx] svn commit: r4427 - trunk/docs/xml/nginx Message-ID: <20120130135211.26F063F9D34@mail.nginx.com> Author: mdounin Date: 2012-01-30 13:52:10 +0000 (Mon, 30 Jan 2012) New Revision: 4427 Log: nginx-1.1.14-RELEASE Modified: trunk/docs/xml/nginx/changes.xml Modified: trunk/docs/xml/nginx/changes.xml =================================================================== --- trunk/docs/xml/nginx/changes.xml 2012-01-30 13:47:03 UTC (rev 4426) +++ trunk/docs/xml/nginx/changes.xml 2012-01-30 13:52:10 UTC (rev 4427) @@ -9,6 +9,67 @@ nginx changelog + + + + +?????? ????? ??????? ????????? ??????????? limit_req ????????????. + + +multiple "limit_req" limits may be used simultaneously. + + + + + +? ????????? ?????? ??? ?????????? ? ????????.
+??????? Piotr Sikora. +
+ +in error handling while connecting to a backend.
+Thanks to Piotr Sikora. +
+
+ + + +? ????????? ?????? ??? ????????????? AIO ?? FreeBSD. + + +in AIO error handling on FreeBSD. + + + + + +? ????????????? ?????????? OpenSSL. + + +in the OpenSSL library initialization. + + + + + +????????? proxy_redirect ????? ????????????? ???????????. + + +the "proxy_redirect" directives might not be correctly inherited. + + + + + +?????? ?????? ??? ????????????????, ???? ?????????????? ????????? pcre_jit. + + +memory leak during reconfiguration if the "pcre_jit" directive was used. + + + +
+ + From mdounin at mdounin.ru Mon Jan 30 13:52:35 2012 From: mdounin at mdounin.ru (mdounin at mdounin.ru) Date: Mon, 30 Jan 2012 13:52:35 +0000 Subject: [nginx] svn commit: r4428 - tags Message-ID: <20120130135235.DB4403F9E1C@mail.nginx.com> Author: mdounin Date: 2012-01-30 13:52:35 +0000 (Mon, 30 Jan 2012) New Revision: 4428 Log: release-1.1.14 tag Added: tags/release-1.1.14/ From mdounin at mdounin.ru Tue Jan 31 01:52:23 2012 From: mdounin at mdounin.ru (Maxim Dounin) Date: Tue, 31 Jan 2012 05:52:23 +0400 Subject: [PATCH] add xslt_stylesheet_param directive In-Reply-To: References: Message-ID: <20120131015222.GH67687@mdounin.ru> Hello! On Tue, Jan 24, 2012 at 11:02:13PM +0100, SamB wrote: > Hi, > next try... > > Attached patch adds xslt_stylesheet_param directive processing. > This is equivalent of xslt parameter passed to xslt_stylesheet, but this > works independently and globally. > xslt config should be a bit simpler because 'common' xslt variables > don't need to be repeated for each xslt_stylesheet. > > Comments/suggestion are welcomed. You may have better lock pointing to a previous incarnation of the patch and outlining changes made. (And please post in plain text, not html.) It was previously submitted here: http://mailman.nginx.org/pipermail/nginx-devel/2012-January/001669.html And previous review was here: http://mailman.nginx.org/pipermail/nginx-devel/2012-January/001670.html > diff -ur nginx-1.1.13/src/http/modules/ngx_http_xslt_filter_module.c nginx-1.1.13-new/src/http/modules/ngx_http_xslt_filter_module.c > --- nginx-1.1.13/src/http/modules/ngx_http_xslt_filter_module.c 2010-07-12 14:52:01.000000000 +0200 > +++ nginx-1.1.13-new/src/http/modules/ngx_http_xslt_filter_module.c 2012-01-24 22:33:24.000000000 +0100 > @@ -48,6 +48,7 @@ > ngx_array_t sheets; /* ngx_http_xslt_sheet_t */ > ngx_hash_t types; > ngx_array_t *types_keys; > + ngx_array_t params; /* ngx_http_complex_value_t */ > } ngx_http_xslt_filter_loc_conf_t; > > > @@ -84,12 +85,16 @@ > void *conf); > static char *ngx_http_xslt_stylesheet(ngx_conf_t *cf, ngx_command_t *cmd, > void *conf); > +static char *ngx_http_xslt_stylesheet_param(ngx_conf_t *cf, ngx_command_t *cmd, > + void *conf); > static void ngx_http_xslt_cleanup_dtd(void *data); > static void ngx_http_xslt_cleanup_stylesheet(void *data); > static void *ngx_http_xslt_filter_create_main_conf(ngx_conf_t *cf); > static void *ngx_http_xslt_filter_create_conf(ngx_conf_t *cf); > +static char *ngx_http_xslt_filter_merge_params(const ngx_array_t *src, ngx_array_t *dest); > static char *ngx_http_xslt_filter_merge_conf(ngx_conf_t *cf, void *parent, > void *child); > +static ngx_int_t ngx_http_xslt_filter_preinit(ngx_conf_t *cf); > static ngx_int_t ngx_http_xslt_filter_init(ngx_conf_t *cf); > static void ngx_http_xslt_filter_exit(ngx_cycle_t *cycle); > > @@ -116,6 +121,13 @@ > 0, > NULL }, > > + { ngx_string("xslt_stylesheet_param"), > + NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1, > + ngx_http_xslt_stylesheet_param, > + NGX_HTTP_LOC_CONF_OFFSET, > + 0, > + NULL }, I tend to think that "xslt_stylesheet_param" is too long. Something like "xslt_param" whould be better. > + > { ngx_string("xslt_types"), > NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE, > ngx_http_types_slot, > @@ -128,7 +140,7 @@ > > > static ngx_http_module_t ngx_http_xslt_filter_module_ctx = { > - NULL, /* preconfiguration */ > + ngx_http_xslt_filter_preinit, /* preconfiguration */ The "...preinit" change is unrelated. If you want it to happen - please submit it seprately. (I think it's noop though.) > ngx_http_xslt_filter_init, /* postconfiguration */ > > ngx_http_xslt_filter_create_main_conf, /* create main configuration */ > @@ -865,6 +877,46 @@ > } > > > +static char * > +ngx_http_xslt_stylesheet_param(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) > +{ > + ngx_http_xslt_filter_loc_conf_t *xlcf = conf; > + > + ngx_http_complex_value_t *param; > + ngx_http_compile_complex_value_t ccv; > + ngx_str_t *value; > + > + value = cf->args->elts; > + > + /* alloc array */ > + if (xlcf->params.elts == NULL > + && ngx_array_init(&xlcf->params, cf->pool, 1, sizeof(ngx_http_complex_value_t)) > + != NGX_OK) > + { > + return NGX_CONF_ERROR; > + } No lines longer than 80 chars, please. And alignment isn't styl-complaint either. In this particular case, please just use another nested if, much like in ngx_http_xslt_stylesheet(): if (xlcf->sheets.elts == NULL) { if (ngx_array_init(&xlcf->sheets, cf->pool, 1, sizeof(ngx_http_xslt_sheet_t)) != NGX_OK) { return NGX_CONF_ERROR; } } > + > + param = ngx_array_push(&xlcf->params); > + if (param == NULL) { > + return NGX_CONF_ERROR; > + } > + > + ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t)); > + > + ccv.cf = cf; > + ccv.value = &value[1]; > + ccv.complex_value = param; > + ccv.zero = 1; > + > + if (ngx_http_compile_complex_value(&ccv) != NGX_OK) { > + return NGX_CONF_ERROR; > + } > + > + return NGX_CONF_OK; > +} > + > + > + 2 blank lines between functions, please. 3 blank lines before ngx_http_xslt_stylesheet() is a bug, not a rule. Another question to consider: there was at least one request to simplify passing XPath expressions in params by allowing ':', see here: http://mailman.nginx.org/pipermail/nginx-devel/2010-July/000414.html http://mailman.nginx.org/pipermail/nginx-devel/2010-September/000486.html With separate directive we may want to allow this. Not sure though, probably it would be better to preserve compatibility with a way how parameters in xslt_stylesheet directive are handled. > static void > ngx_http_xslt_cleanup_dtd(void *data) > { > @@ -931,6 +983,37 @@ > > > static char * > +ngx_http_xslt_filter_merge_params(const ngx_array_t *src, ngx_array_t *dest) > +{ > + ngx_uint_t i; > + > + /* copy params */ > + if (src->nelts && !dest->nelts) { > + dest->elts = src->elts; > + dest->nelts = src->nelts; > + } > + /* join params */ > + else if (src->nelts && dest->nelts) { > + ngx_http_complex_value_t *params; > + > + params = src->elts; > + for (i = 0; i < src->nelts; i++) { > + ngx_http_complex_value_t *new; > + > + new = ngx_array_push(dest); > + if (new == NULL) { > + return NGX_CONF_ERROR; > + } > + > + *new = params[i]; /* copy */ > + } > + } > + > + return NGX_CONF_OK; > +} > + > + > +static char * > ngx_http_xslt_filter_merge_conf(ngx_conf_t *cf, void *parent, void *child) > { > ngx_http_xslt_filter_loc_conf_t *prev = parent; > @@ -940,9 +1023,26 @@ > conf->dtd = prev->dtd; > } > > + if (ngx_http_xslt_filter_merge_params(&prev->params, &conf->params) > + != NGX_CONF_OK) { > + return NGX_CONF_ERROR; > + } As I already said in the previous review, params should follow the same logic as other array-type directives (access_log, proxy_set_header, fastcgi_param, error_page, ...). I.e. if you define any directive on a particular level, previous level data should not be inherited: location / { xslt_param foo=1; location /bar/ { xslt_param bar=1; } } In location /bar/ only "bar=1" parameter should be present. Please also note that with your code it's not possible to clear inherited params at all. > + > if (conf->sheets.nelts == 0) { > conf->sheets = prev->sheets; > } > + else { > + ngx_http_xslt_sheet_t *sheet; > + ngx_uint_t i; > + > + sheet = conf->sheets.elts; > + for (i = 0; i < conf->sheets.nelts; i++) { > + if (ngx_http_xslt_filter_merge_params(&conf->params, &sheet[i].params) > + != NGX_CONF_OK) { > + return NGX_CONF_ERROR; > + } > + } > + } This is wrong. Consider configuration like this: location / { xslt_stylesheet root.xslt; location /foo/ { xslt_params foo=bar; } } With the above merge logic in location /foo/ the root.xslt stylesheet will be used without parameters, while "foo=bar" is clearly expected. I suggest to use simple array-type inheritance for params, like if (conf->params == NULL) { conf->params = prev->params; } and apply them separately to the stylesheet at runtime. This will resolve both problems outlined above. > > if (ngx_http_merge_types(cf, &conf->types_keys, &conf->types, > &prev->types_keys, &prev->types, > @@ -957,7 +1057,7 @@ > > > static ngx_int_t > -ngx_http_xslt_filter_init(ngx_conf_t *cf) > +ngx_http_xslt_filter_preinit(ngx_conf_t *cf) > { > xmlInitParser(); > > @@ -965,6 +1065,13 @@ > exsltRegisterAll(); > #endif > > + return NGX_OK; > +} > + > + > +static ngx_int_t > +ngx_http_xslt_filter_init(ngx_conf_t *cf) > +{ > ngx_http_next_header_filter = ngx_http_top_header_filter; > ngx_http_top_header_filter = ngx_http_xslt_header_filter; > See above, this is unrelated change. Maxim Dounin From dave at daveb.net Tue Jan 31 23:39:03 2012 From: dave at daveb.net (Dave Bailey) Date: Tue, 31 Jan 2012 15:39:03 -0800 Subject: rewritten redirect with relative url Message-ID: Hi, In ngx_http_upstream_rewrite_location(), r->upstream->rewrite_redirect may replace the Location header value with a new value. This value ends up going through ngx_http_header_filter(), and if it's a relative URL, the header filter adds a scheme and host to it. However, if r->upstream->rewrite_redirect declines (rc = NGX_DECLINED) to rewrite the redirect, the value does not go through ngx_http_header_filter() even if it is a relative URL. Is this intended behavior? If it is not, I attached a patch that sets r->headers_out.location consistently. -dave -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: rewrite_redirect.patch Type: application/octet-stream Size: 831 bytes Desc: not available URL: From vitalif at yourcmc.ru Tue Jan 31 23:51:18 2012 From: vitalif at yourcmc.ru (vitalif at yourcmc.ru) Date: Wed, 01 Feb 2012 03:51:18 +0400 Subject: Patch for nginx handling of X-Accel-Redirect URLs Message-ID: <8b6059000146223e8d811ef594799638@yourcmc.ru> Hello! By now, nginx does not allow urlencoded X-Accel-Redirect URLs and totally fails to access files with '?' in name with it. The problem was also discussed at 'nginx' maillist: http://nginx.2469901.n2.nabble.com/Bug-X-Accel-Redirect-td5510716.html The patch suggested there just unescaped the url in ngx_http_parse_unsafe_uri(). As Maxim Dounin said, this is incorrect because also unescapes the query string. I want to suggest another solution - swap ngx_http_parse_unsafe_uri() to ngx_http_parse_complex_uri(). The patch is in attachment. What can you say about it? -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: patch-nginx-x-accel-uri-parsing.diff URL: