From 01f0bd5ae6dffe914b2909caf428f565a1c60351 Mon Sep 17 00:00:00 2001 From: NGINX team Date: Mon, 30 Jan 2012 14:53:52 +0000 Subject: [PATCH] Changes with nginx 1.1.14 30 Jan 2012 *) Feature: multiple "limit_req" limits may be used simultaneously. *) Bugfix: in error handling while connecting to a backend. Thanks to Piotr Sikora. *) Bugfix: in AIO error handling on FreeBSD. *) Bugfix: in the OpenSSL library initialization. *) Bugfix: the "proxy_redirect" directives might not be correctly inherited. *) Bugfix: memory leak during reconfiguration if the "pcre_jit" directive was used. Maxim Dounin _______________________________________________ nginx-announce mailing list nginx-announce@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-announce --- CHANGES | 18 + CHANGES.ru | 23 +- LICENSE | 1 + auto/cc/acc | 1 + auto/cc/bcc | 1 + auto/cc/ccc | 1 + auto/cc/conf | 1 + auto/cc/gcc | 1 + auto/cc/icc | 1 + auto/cc/msvc | 1 + auto/cc/name | 1 + auto/cc/owc | 1 + auto/cc/sunc | 1 + auto/define | 1 + auto/endianess | 1 + auto/feature | 1 + auto/have | 1 + auto/have_headers | 1 + auto/headers | 1 + auto/include | 1 + auto/init | 1 + auto/install | 1 + auto/lib/conf | 1 + auto/lib/geoip/conf | 1 + auto/lib/google-perftools/conf | 1 + auto/lib/libatomic/conf | 1 + auto/lib/libatomic/make | 1 + auto/lib/libgd/conf | 1 + auto/lib/libxslt/conf | 1 + auto/lib/make | 1 + auto/lib/md5/conf | 1 + auto/lib/md5/make | 1 + auto/lib/md5/makefile.bcc | 1 + auto/lib/md5/makefile.msvc | 1 + auto/lib/md5/makefile.owc | 1 + auto/lib/openssl/conf | 1 + auto/lib/openssl/make | 1 + auto/lib/openssl/makefile.bcc | 1 + auto/lib/openssl/makefile.msvc | 1 + auto/lib/pcre/conf | 1 + auto/lib/pcre/make | 1 + auto/lib/pcre/makefile.bcc | 1 + auto/lib/pcre/makefile.msvc | 1 + auto/lib/pcre/makefile.owc | 1 + auto/lib/perl/conf | 1 + auto/lib/perl/make | 1 + auto/lib/sha1/conf | 1 + auto/lib/sha1/make | 1 + auto/lib/sha1/makefile.bcc | 1 + auto/lib/sha1/makefile.msvc | 1 + auto/lib/sha1/makefile.owc | 1 + auto/lib/test | 1 + auto/lib/zlib/conf | 1 + auto/lib/zlib/make | 1 + auto/lib/zlib/makefile.bcc | 1 + auto/lib/zlib/makefile.msvc | 1 + auto/lib/zlib/makefile.owc | 1 + auto/make | 1 + auto/modules | 1 + auto/nohave | 1 + auto/options | 1 + auto/os/conf | 1 + auto/os/darwin | 1 + auto/os/freebsd | 1 + auto/os/linux | 1 + auto/os/solaris | 1 + auto/os/win32 | 1 + auto/sources | 1 + auto/stubs | 1 + auto/summary | 1 + auto/types/sizeof | 1 + auto/types/typedef | 1 + auto/types/uintptr_t | 1 + auto/types/value | 1 + auto/unix | 1 + configure | 1 + man/nginx.8 | 1 + src/core/nginx.c | 1 + src/core/nginx.h | 5 +- src/core/ngx_array.c | 1 + src/core/ngx_array.h | 1 + src/core/ngx_buf.c | 1 + src/core/ngx_buf.h | 1 + src/core/ngx_conf_file.c | 1 + src/core/ngx_conf_file.h | 1 + src/core/ngx_config.h | 1 + src/core/ngx_connection.c | 1 + src/core/ngx_connection.h | 1 + src/core/ngx_core.h | 1 + src/core/ngx_cpuinfo.c | 1 + src/core/ngx_crc.h | 1 + src/core/ngx_crc32.c | 1 + src/core/ngx_crc32.h | 1 + src/core/ngx_crypt.h | 1 + src/core/ngx_cycle.c | 1 + src/core/ngx_cycle.h | 1 + src/core/ngx_file.c | 1 + src/core/ngx_file.h | 1 + src/core/ngx_hash.c | 1 + src/core/ngx_hash.h | 1 + src/core/ngx_inet.c | 1 + src/core/ngx_inet.h | 1 + src/core/ngx_list.c | 1 + src/core/ngx_list.h | 1 + src/core/ngx_log.c | 1 + src/core/ngx_log.h | 1 + src/core/ngx_md5.h | 1 + src/core/ngx_murmurhash.h | 1 + src/core/ngx_open_file_cache.c | 1 + src/core/ngx_open_file_cache.h | 1 + src/core/ngx_output_chain.c | 1 + src/core/ngx_palloc.c | 1 + src/core/ngx_palloc.h | 1 + src/core/ngx_parse.c | 1 + src/core/ngx_parse.h | 1 + src/core/ngx_queue.c | 1 + src/core/ngx_queue.h | 1 + src/core/ngx_radix_tree.c | 1 + src/core/ngx_radix_tree.h | 1 + src/core/ngx_rbtree.c | 1 + src/core/ngx_rbtree.h | 1 + src/core/ngx_regex.c | 58 ++- src/core/ngx_regex.h | 1 + src/core/ngx_resolver.c | 1 + src/core/ngx_resolver.h | 1 + src/core/ngx_sha1.h | 1 + src/core/ngx_shmtx.c | 1 + src/core/ngx_shmtx.h | 1 + src/core/ngx_slab.c | 1 + src/core/ngx_slab.h | 1 + src/core/ngx_spinlock.c | 1 + src/core/ngx_string.c | 1 + src/core/ngx_string.h | 1 + src/core/ngx_times.c | 1 + src/core/ngx_times.h | 1 + src/event/modules/ngx_aio_module.c | 1 + src/event/modules/ngx_devpoll_module.c | 1 + src/event/modules/ngx_epoll_module.c | 1 + src/event/modules/ngx_eventport_module.c | 1 + src/event/modules/ngx_kqueue_module.c | 1 + src/event/modules/ngx_poll_module.c | 1 + src/event/modules/ngx_rtsig_module.c | 1 + src/event/modules/ngx_select_module.c | 1 + src/event/modules/ngx_win32_select_module.c | 1 + src/event/ngx_event.c | 1 + src/event/ngx_event.h | 1 + src/event/ngx_event_accept.c | 1 + src/event/ngx_event_busy_lock.c | 1 + src/event/ngx_event_busy_lock.h | 1 + src/event/ngx_event_connect.c | 12 +- src/event/ngx_event_connect.h | 1 + src/event/ngx_event_mutex.c | 1 + src/event/ngx_event_openssl.c | 3 +- src/event/ngx_event_openssl.h | 1 + src/event/ngx_event_pipe.c | 1 + src/event/ngx_event_pipe.h | 1 + src/event/ngx_event_posted.c | 1 + src/event/ngx_event_posted.h | 1 + src/event/ngx_event_timer.c | 1 + src/event/ngx_event_timer.h | 1 + src/http/modules/ngx_http_access_module.c | 1 + .../modules/ngx_http_addition_filter_module.c | 1 + src/http/modules/ngx_http_auth_basic_module.c | 1 + src/http/modules/ngx_http_autoindex_module.c | 1 + src/http/modules/ngx_http_browser_module.c | 1 + .../modules/ngx_http_charset_filter_module.c | 1 + .../modules/ngx_http_chunked_filter_module.c | 1 + src/http/modules/ngx_http_dav_module.c | 1 + .../modules/ngx_http_degradation_module.c | 1 + src/http/modules/ngx_http_empty_gif_module.c | 1 + src/http/modules/ngx_http_fastcgi_module.c | 1 + src/http/modules/ngx_http_flv_module.c | 1 + src/http/modules/ngx_http_geo_module.c | 1 + src/http/modules/ngx_http_geoip_module.c | 1 + .../modules/ngx_http_gzip_filter_module.c | 1 + .../modules/ngx_http_gzip_static_module.c | 1 + .../modules/ngx_http_headers_filter_module.c | 1 + .../modules/ngx_http_image_filter_module.c | 1 + src/http/modules/ngx_http_index_module.c | 1 + src/http/modules/ngx_http_limit_conn_module.c | 1 + src/http/modules/ngx_http_limit_req_module.c | 423 ++++++++++++------ src/http/modules/ngx_http_log_module.c | 1 + src/http/modules/ngx_http_map_module.c | 1 + src/http/modules/ngx_http_memcached_module.c | 1 + src/http/modules/ngx_http_mp4_module.c | 1 + .../ngx_http_not_modified_filter_module.c | 1 + src/http/modules/ngx_http_proxy_module.c | 3 + .../modules/ngx_http_random_index_module.c | 1 + .../modules/ngx_http_range_filter_module.c | 1 + src/http/modules/ngx_http_realip_module.c | 1 + src/http/modules/ngx_http_referer_module.c | 1 + src/http/modules/ngx_http_rewrite_module.c | 1 + src/http/modules/ngx_http_scgi_module.c | 1 + .../modules/ngx_http_secure_link_module.c | 1 + .../modules/ngx_http_split_clients_module.c | 1 + src/http/modules/ngx_http_ssi_filter_module.c | 1 + src/http/modules/ngx_http_ssi_filter_module.h | 1 + src/http/modules/ngx_http_ssl_module.c | 1 + src/http/modules/ngx_http_ssl_module.h | 1 + src/http/modules/ngx_http_static_module.c | 1 + .../modules/ngx_http_stub_status_module.c | 1 + src/http/modules/ngx_http_sub_filter_module.c | 1 + .../ngx_http_upstream_ip_hash_module.c | 1 + .../ngx_http_upstream_keepalive_module.c | 1 + .../modules/ngx_http_userid_filter_module.c | 1 + src/http/modules/ngx_http_uwsgi_module.c | 1 + .../modules/ngx_http_xslt_filter_module.c | 1 + src/http/modules/perl/Makefile.PL | 1 + src/http/modules/perl/nginx.pm | 3 +- src/http/modules/perl/nginx.xs | 1 + src/http/modules/perl/ngx_http_perl_module.c | 1 + src/http/modules/perl/ngx_http_perl_module.h | 1 + src/http/ngx_http.c | 1 + src/http/ngx_http.h | 1 + src/http/ngx_http_busy_lock.c | 1 + src/http/ngx_http_busy_lock.h | 1 + src/http/ngx_http_cache.h | 1 + src/http/ngx_http_config.h | 1 + src/http/ngx_http_copy_filter_module.c | 3 +- src/http/ngx_http_core_module.c | 1 + src/http/ngx_http_core_module.h | 1 + src/http/ngx_http_file_cache.c | 1 + src/http/ngx_http_header_filter_module.c | 1 + src/http/ngx_http_parse.c | 1 + src/http/ngx_http_parse_time.c | 1 + src/http/ngx_http_postpone_filter_module.c | 1 + src/http/ngx_http_request.c | 1 + src/http/ngx_http_request.h | 1 + src/http/ngx_http_request_body.c | 1 + src/http/ngx_http_script.c | 1 + src/http/ngx_http_script.h | 1 + src/http/ngx_http_special_response.c | 1 + src/http/ngx_http_upstream.c | 1 + src/http/ngx_http_upstream.h | 1 + src/http/ngx_http_upstream_round_robin.c | 1 + src/http/ngx_http_upstream_round_robin.h | 1 + src/http/ngx_http_variables.c | 1 + src/http/ngx_http_variables.h | 1 + src/http/ngx_http_write_filter_module.c | 1 + src/mail/ngx_mail.c | 1 + src/mail/ngx_mail.h | 1 + src/mail/ngx_mail_auth_http_module.c | 1 + src/mail/ngx_mail_core_module.c | 1 + src/mail/ngx_mail_handler.c | 1 + src/mail/ngx_mail_imap_handler.c | 1 + src/mail/ngx_mail_imap_module.c | 1 + src/mail/ngx_mail_imap_module.h | 1 + src/mail/ngx_mail_parse.c | 1 + src/mail/ngx_mail_pop3_handler.c | 1 + src/mail/ngx_mail_pop3_module.c | 1 + src/mail/ngx_mail_pop3_module.h | 1 + src/mail/ngx_mail_proxy_module.c | 1 + src/mail/ngx_mail_smtp_handler.c | 1 + src/mail/ngx_mail_smtp_module.c | 1 + src/mail/ngx_mail_smtp_module.h | 1 + src/mail/ngx_mail_ssl_module.c | 1 + src/mail/ngx_mail_ssl_module.h | 1 + src/misc/ngx_google_perftools_module.c | 1 + src/os/unix/ngx_aio_read.c | 1 + src/os/unix/ngx_aio_read_chain.c | 1 + src/os/unix/ngx_aio_write.c | 1 + src/os/unix/ngx_aio_write_chain.c | 1 + src/os/unix/ngx_alloc.c | 1 + src/os/unix/ngx_alloc.h | 1 + src/os/unix/ngx_atomic.h | 1 + src/os/unix/ngx_channel.c | 1 + src/os/unix/ngx_channel.h | 1 + src/os/unix/ngx_daemon.c | 1 + src/os/unix/ngx_darwin.h | 1 + src/os/unix/ngx_darwin_config.h | 1 + src/os/unix/ngx_darwin_init.c | 1 + src/os/unix/ngx_darwin_sendfile_chain.c | 1 + src/os/unix/ngx_errno.c | 1 + src/os/unix/ngx_errno.h | 1 + src/os/unix/ngx_file_aio_read.c | 28 +- src/os/unix/ngx_files.c | 1 + src/os/unix/ngx_files.h | 1 + src/os/unix/ngx_freebsd.h | 1 + src/os/unix/ngx_freebsd_config.h | 1 + src/os/unix/ngx_freebsd_init.c | 1 + src/os/unix/ngx_freebsd_rfork_thread.c | 1 + src/os/unix/ngx_freebsd_rfork_thread.h | 1 + src/os/unix/ngx_freebsd_sendfile_chain.c | 1 + src/os/unix/ngx_gcc_atomic_amd64.h | 1 + src/os/unix/ngx_gcc_atomic_ppc.h | 1 + src/os/unix/ngx_gcc_atomic_sparc64.h | 1 + src/os/unix/ngx_gcc_atomic_x86.h | 1 + src/os/unix/ngx_linux.h | 1 + src/os/unix/ngx_linux_aio_read.c | 1 + src/os/unix/ngx_linux_config.h | 1 + src/os/unix/ngx_linux_init.c | 1 + src/os/unix/ngx_linux_sendfile_chain.c | 1 + src/os/unix/ngx_os.h | 1 + src/os/unix/ngx_posix_config.h | 1 + src/os/unix/ngx_posix_init.c | 1 + src/os/unix/ngx_process.c | 1 + src/os/unix/ngx_process.h | 1 + src/os/unix/ngx_process_cycle.c | 1 + src/os/unix/ngx_process_cycle.h | 1 + src/os/unix/ngx_pthread_thread.c | 1 + src/os/unix/ngx_readv_chain.c | 1 + src/os/unix/ngx_recv.c | 1 + src/os/unix/ngx_send.c | 1 + src/os/unix/ngx_setproctitle.c | 1 + src/os/unix/ngx_setproctitle.h | 1 + src/os/unix/ngx_shmem.c | 1 + src/os/unix/ngx_shmem.h | 1 + src/os/unix/ngx_socket.c | 1 + src/os/unix/ngx_socket.h | 1 + src/os/unix/ngx_solaris.h | 1 + src/os/unix/ngx_solaris_config.h | 1 + src/os/unix/ngx_solaris_init.c | 1 + src/os/unix/ngx_solaris_sendfilev_chain.c | 1 + src/os/unix/ngx_sunpro_amd64.il | 1 + src/os/unix/ngx_sunpro_atomic_sparc64.h | 1 + src/os/unix/ngx_sunpro_sparc64.il | 1 + src/os/unix/ngx_sunpro_x86.il | 1 + src/os/unix/ngx_thread.h | 1 + src/os/unix/ngx_time.c | 1 + src/os/unix/ngx_time.h | 1 + src/os/unix/ngx_udp_recv.c | 1 + src/os/unix/ngx_user.c | 1 + src/os/unix/ngx_user.h | 1 + src/os/unix/ngx_writev_chain.c | 1 + src/os/unix/rfork_thread.S | 1 + 325 files changed, 726 insertions(+), 167 deletions(-) diff --git a/CHANGES b/CHANGES index 37af0bc26..8655769d9 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,22 @@ +Changes with nginx 1.1.14 30 Jan 2012 + + *) Feature: multiple "limit_req" limits may be used simultaneously. + + *) Bugfix: in error handling while connecting to a backend. + Thanks to Piotr Sikora. + + *) Bugfix: in AIO error handling on FreeBSD. + + *) Bugfix: in the OpenSSL library initialization. + + *) Bugfix: the "proxy_redirect" directives might not be correctly + inherited. + + *) Bugfix: memory leak during reconfiguration if the "pcre_jit" + directive was used. + + Changes with nginx 1.1.13 16 Jan 2012 *) Feature: the "TLSv1.1" and "TLSv1.2" parameters of the diff --git a/CHANGES.ru b/CHANGES.ru index cbfe0fc0c..8811c92f2 100644 --- a/CHANGES.ru +++ b/CHANGES.ru @@ -1,4 +1,23 @@ +Изменения в nginx 1.1.14 30.01.2012 + + *) Добавление: теперь можно указать несколько ограничений limit_req + одновременно. + + *) Исправление: в обработке ошибок при соединении с бэкендом. + Спасибо Piotr Sikora. + + *) Исправление: в обработке ошибок при использовании AIO на FreeBSD. + + *) Исправление: в инициализации библиотеки OpenSSL. + + *) Исправление: директивы proxy_redirect могли наследоваться + некорректно. + + *) Исправление: утечки памяти при переконфигурации, если использовалась + директива pcre_jit. + + Изменения в nginx 1.1.13 16.01.2012 *) Добавление: параметры TLSv1.1 и TLSv1.2 в директиве ssl_protocols. @@ -7,10 +26,10 @@ ошибка появилась в 1.1.12. *) Исправление: директива proxy_redirect некорректно обрабатывала - заголовк Refresh при использовании регулярных выражений. + заголовок Refresh при использовании регулярных выражений. *) Исправление: директива proxy_cache_use_stale с параметром error не - возвращала ответ из кэша, если все бекенды были признаны + возвращала ответ из кэша, если все бэкенды были признаны неработающими. *) Исправление: директива worker_cpu_affinity могла не работать. diff --git a/LICENSE b/LICENSE index 520e9bae9..1bfc054da 100644 --- a/LICENSE +++ b/LICENSE @@ -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 diff --git a/auto/cc/acc b/auto/cc/acc index f325bc56d..6baee672a 100644 --- a/auto/cc/acc +++ b/auto/cc/acc @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. # aCC: HP ANSI C++ B3910B A.03.55.02 diff --git a/auto/cc/bcc b/auto/cc/bcc index 9570a3c47..ec82e60fb 100644 --- a/auto/cc/bcc +++ b/auto/cc/bcc @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. # Borland C++ 5.5 diff --git a/auto/cc/ccc b/auto/cc/ccc index 298f31e99..c96404510 100644 --- a/auto/cc/ccc +++ b/auto/cc/ccc @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. # Compaq C V6.5-207 diff --git a/auto/cc/conf b/auto/cc/conf index bdcce2c01..c9118f2fd 100644 --- a/auto/cc/conf +++ b/auto/cc/conf @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. LINK="\$(CC)" diff --git a/auto/cc/gcc b/auto/cc/gcc index 8ea1f5846..de666a34c 100644 --- a/auto/cc/gcc +++ b/auto/cc/gcc @@ -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 diff --git a/auto/cc/icc b/auto/cc/icc index 77cf180df..1d83ed37a 100644 --- a/auto/cc/icc +++ b/auto/cc/icc @@ -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 diff --git a/auto/cc/msvc b/auto/cc/msvc index 01d6f7f2f..a99d5a92c 100644 --- a/auto/cc/msvc +++ b/auto/cc/msvc @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. # MSVC 6.0 SP2 diff --git a/auto/cc/name b/auto/cc/name index 8788bc662..598f879a0 100644 --- a/auto/cc/name +++ b/auto/cc/name @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ "$NGX_PLATFORM" != win32 ]; then diff --git a/auto/cc/owc b/auto/cc/owc index 39c180a26..22eb4c125 100644 --- a/auto/cc/owc +++ b/auto/cc/owc @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. # Open Watcom C 1.0, 1.2, 1.3 diff --git a/auto/cc/sunc b/auto/cc/sunc index 69e6c2c71..dd9ccedfb 100644 --- a/auto/cc/sunc +++ b/auto/cc/sunc @@ -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 diff --git a/auto/define b/auto/define index 971f99df2..b5a762259 100644 --- a/auto/define +++ b/auto/define @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. cat << END >> $NGX_AUTO_CONFIG_H diff --git a/auto/endianess b/auto/endianess index 5ed22a8ec..452dd7c12 100644 --- a/auto/endianess +++ b/auto/endianess @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo $ngx_n "checking for system endianess ...$ngx_c" diff --git a/auto/feature b/auto/feature index 98e757caf..c13e51dfb 100644 --- a/auto/feature +++ b/auto/feature @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo $ngx_n "checking for $ngx_feature ...$ngx_c" diff --git a/auto/have b/auto/have index 1b644ad32..f8e3751c5 100644 --- a/auto/have +++ b/auto/have @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. cat << END >> $NGX_AUTO_CONFIG_H diff --git a/auto/have_headers b/auto/have_headers index 526ac47d4..a3a75430a 100644 --- a/auto/have_headers +++ b/auto/have_headers @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. cat << END >> $NGX_AUTO_HEADERS_H diff --git a/auto/headers b/auto/headers index 6f5225f81..5a2e6b902 100644 --- a/auto/headers +++ b/auto/headers @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. ngx_include="unistd.h"; . auto/include diff --git a/auto/include b/auto/include index 3a047d303..3466fda15 100644 --- a/auto/include +++ b/auto/include @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo $ngx_n "checking for $ngx_include ...$ngx_c" diff --git a/auto/init b/auto/init index 56ecb1908..910f5294b 100644 --- a/auto/init +++ b/auto/init @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. NGX_MAKEFILE=$NGX_OBJS/Makefile diff --git a/auto/install b/auto/install index 2b1002472..c2c0ade59 100644 --- a/auto/install +++ b/auto/install @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $USE_PERL = YES ]; then diff --git a/auto/lib/conf b/auto/lib/conf index 357e7810d..e1e447557 100644 --- a/auto/lib/conf +++ b/auto/lib/conf @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $USE_PCRE = YES -o $PCRE != NONE ]; then diff --git a/auto/lib/geoip/conf b/auto/lib/geoip/conf index 5647e9167..3764d7649 100644 --- a/auto/lib/geoip/conf +++ b/auto/lib/geoip/conf @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. ngx_feature="GeoIP library" diff --git a/auto/lib/google-perftools/conf b/auto/lib/google-perftools/conf index 67df9f8ac..398ddd05e 100644 --- a/auto/lib/google-perftools/conf +++ b/auto/lib/google-perftools/conf @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. ngx_feature="Google perftools" diff --git a/auto/lib/libatomic/conf b/auto/lib/libatomic/conf index 5cf16f381..d1e484ab3 100644 --- a/auto/lib/libatomic/conf +++ b/auto/lib/libatomic/conf @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $NGX_LIBATOMIC != YES ]; then diff --git a/auto/lib/libatomic/make b/auto/lib/libatomic/make index e1672e324..b84267b63 100644 --- a/auto/lib/libatomic/make +++ b/auto/lib/libatomic/make @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. cat << END >> $NGX_MAKEFILE diff --git a/auto/lib/libgd/conf b/auto/lib/libgd/conf index 637872370..b0bc74c15 100644 --- a/auto/lib/libgd/conf +++ b/auto/lib/libgd/conf @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. ngx_feature="GD library" diff --git a/auto/lib/libxslt/conf b/auto/lib/libxslt/conf index 8c9ea8ba1..bc19d83dd 100644 --- a/auto/lib/libxslt/conf +++ b/auto/lib/libxslt/conf @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. ngx_feature="libxslt" diff --git a/auto/lib/make b/auto/lib/make index f22767eb4..58a84a34c 100644 --- a/auto/lib/make +++ b/auto/lib/make @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $PCRE != NONE -a $PCRE != NO -a $PCRE != YES ]; then diff --git a/auto/lib/md5/conf b/auto/lib/md5/conf index 9afe5b8de..f9c1ed902 100644 --- a/auto/lib/md5/conf +++ b/auto/lib/md5/conf @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $MD5 != NONE ]; then diff --git a/auto/lib/md5/make b/auto/lib/md5/make index 60af28cca..81f138ab6 100644 --- a/auto/lib/md5/make +++ b/auto/lib/md5/make @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. case "$NGX_CC_NAME" in diff --git a/auto/lib/md5/makefile.bcc b/auto/lib/md5/makefile.bcc index c02ef95bd..eb6fb6241 100644 --- a/auto/lib/md5/makefile.bcc +++ b/auto/lib/md5/makefile.bcc @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -q -O2 -tWM $(CPU_OPT) -DL_ENDIAN diff --git a/auto/lib/md5/makefile.msvc b/auto/lib/md5/makefile.msvc index 233da0fb5..90d62fac7 100644 --- a/auto/lib/md5/makefile.msvc +++ b/auto/lib/md5/makefile.msvc @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -nologo -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT) -D L_ENDIAN diff --git a/auto/lib/md5/makefile.owc b/auto/lib/md5/makefile.owc index c36c9369f..78c1e61dd 100644 --- a/auto/lib/md5/makefile.owc +++ b/auto/lib/md5/makefile.owc @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -zq -bt=nt -bm -ot -op -oi -oe -s $(CPU_OPT) diff --git a/auto/lib/openssl/conf b/auto/lib/openssl/conf index 8218a5b97..528ee1794 100644 --- a/auto/lib/openssl/conf +++ b/auto/lib/openssl/conf @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $OPENSSL != NONE ]; then diff --git a/auto/lib/openssl/make b/auto/lib/openssl/make index a2025bbd6..9090fcbfd 100644 --- a/auto/lib/openssl/make +++ b/auto/lib/openssl/make @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. case "$CC" in diff --git a/auto/lib/openssl/makefile.bcc b/auto/lib/openssl/makefile.bcc index 5938cbf6b..6a94ff749 100644 --- a/auto/lib/openssl/makefile.bcc +++ b/auto/lib/openssl/makefile.bcc @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. all: diff --git a/auto/lib/openssl/makefile.msvc b/auto/lib/openssl/makefile.msvc index 379b95dc0..fc9e57864 100644 --- a/auto/lib/openssl/makefile.msvc +++ b/auto/lib/openssl/makefile.msvc @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. all: diff --git a/auto/lib/pcre/conf b/auto/lib/pcre/conf index fd98ee9f5..c56848d5d 100644 --- a/auto/lib/pcre/conf +++ b/auto/lib/pcre/conf @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $PCRE != NONE ]; then diff --git a/auto/lib/pcre/make b/auto/lib/pcre/make index a9be75e36..834779b9c 100644 --- a/auto/lib/pcre/make +++ b/auto/lib/pcre/make @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. case "$NGX_CC_NAME" in diff --git a/auto/lib/pcre/makefile.bcc b/auto/lib/pcre/makefile.bcc index 40d579fb5..1c140d668 100644 --- a/auto/lib/pcre/makefile.bcc +++ b/auto/lib/pcre/makefile.bcc @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -q -O2 -tWM -w-8004 $(CPU_OPT) diff --git a/auto/lib/pcre/makefile.msvc b/auto/lib/pcre/makefile.msvc index 47ae6991a..7a8da7158 100644 --- a/auto/lib/pcre/makefile.msvc +++ b/auto/lib/pcre/makefile.msvc @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT) diff --git a/auto/lib/pcre/makefile.owc b/auto/lib/pcre/makefile.owc index b2f1d1297..bfb692068 100644 --- a/auto/lib/pcre/makefile.owc +++ b/auto/lib/pcre/makefile.owc @@ -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) diff --git a/auto/lib/perl/conf b/auto/lib/perl/conf index 3f7b90849..52c7084e9 100644 --- a/auto/lib/perl/conf +++ b/auto/lib/perl/conf @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo "checking for perl" diff --git a/auto/lib/perl/make b/auto/lib/perl/make index 49eb5cf34..f5d9ab501 100644 --- a/auto/lib/perl/make +++ b/auto/lib/perl/make @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. cat << END >> $NGX_MAKEFILE diff --git a/auto/lib/sha1/conf b/auto/lib/sha1/conf index af3d3fba2..1e644c02f 100644 --- a/auto/lib/sha1/conf +++ b/auto/lib/sha1/conf @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $SHA1 != NONE ]; then diff --git a/auto/lib/sha1/make b/auto/lib/sha1/make index 6c89acf1b..fc10aaef3 100644 --- a/auto/lib/sha1/make +++ b/auto/lib/sha1/make @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. case "$NGX_CC_NAME" in diff --git a/auto/lib/sha1/makefile.bcc b/auto/lib/sha1/makefile.bcc index 1d8b5e4c8..b0685fa45 100644 --- a/auto/lib/sha1/makefile.bcc +++ b/auto/lib/sha1/makefile.bcc @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -q -O2 -tWM $(CPU_OPT) -DL_ENDIAN diff --git a/auto/lib/sha1/makefile.msvc b/auto/lib/sha1/makefile.msvc index 4abd366ca..3cbd21b3d 100644 --- a/auto/lib/sha1/makefile.msvc +++ b/auto/lib/sha1/makefile.msvc @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -nologo -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT) -D L_ENDIAN diff --git a/auto/lib/sha1/makefile.owc b/auto/lib/sha1/makefile.owc index c1a3e0431..fc095cc98 100644 --- a/auto/lib/sha1/makefile.owc +++ b/auto/lib/sha1/makefile.owc @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -zq -bt=nt -bm -ot -op -oi -oe -s $(CPU_OPT) diff --git a/auto/lib/test b/auto/lib/test index 6821b51da..907e2353b 100644 --- a/auto/lib/test +++ b/auto/lib/test @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo $ngx_n "checking for $ngx_lib ...$ngx_c" diff --git a/auto/lib/zlib/conf b/auto/lib/zlib/conf index 843dd5a55..cefc874b2 100644 --- a/auto/lib/zlib/conf +++ b/auto/lib/zlib/conf @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $ZLIB != NONE ]; then diff --git a/auto/lib/zlib/make b/auto/lib/zlib/make index b874b04ad..9401a1d1a 100644 --- a/auto/lib/zlib/make +++ b/auto/lib/zlib/make @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. case "$NGX_CC_NAME" in diff --git a/auto/lib/zlib/makefile.bcc b/auto/lib/zlib/makefile.bcc index 69a728c76..56f835688 100644 --- a/auto/lib/zlib/makefile.bcc +++ b/auto/lib/zlib/makefile.bcc @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -q -O2 -tWM -w-8004 -w-8012 $(CPU_OPT) diff --git a/auto/lib/zlib/makefile.msvc b/auto/lib/zlib/makefile.msvc index d02f2b68e..2c7c1ae10 100644 --- a/auto/lib/zlib/makefile.msvc +++ b/auto/lib/zlib/makefile.msvc @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -nologo -O2 -Ob1 -Oi -Gs $(LIBC) $(CPU_OPT) diff --git a/auto/lib/zlib/makefile.owc b/auto/lib/zlib/makefile.owc index 738e9a01b..f75e66d4f 100644 --- a/auto/lib/zlib/makefile.owc +++ b/auto/lib/zlib/makefile.owc @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CFLAGS = -zq -bt=nt -ot -op -oi -oe -s -bm $(CPU_OPT) diff --git a/auto/make b/auto/make index 27f71ecdc..e7f549040 100644 --- a/auto/make +++ b/auto/make @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo "creating $NGX_MAKEFILE" diff --git a/auto/modules b/auto/modules index 93e0de995..dab660f87 100644 --- a/auto/modules +++ b/auto/modules @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. if [ $EVENT_SELECT = NO -a $EVENT_FOUND = NO ]; then diff --git a/auto/nohave b/auto/nohave index bb5632aaf..dfb171837 100644 --- a/auto/nohave +++ b/auto/nohave @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. cat << END >> $NGX_AUTO_CONFIG_H diff --git a/auto/options b/auto/options index 2b040238e..393be4066 100644 --- a/auto/options +++ b/auto/options @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. help=no diff --git a/auto/os/conf b/auto/os/conf index f4d08cb42..8c18a63fc 100644 --- a/auto/os/conf +++ b/auto/os/conf @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo "checking for $NGX_SYSTEM specific features" diff --git a/auto/os/darwin b/auto/os/darwin index f9953b95c..590e03697 100644 --- a/auto/os/darwin +++ b/auto/os/darwin @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. have=NGX_DARWIN . auto/have_headers diff --git a/auto/os/freebsd b/auto/os/freebsd index 082938800..88654ba60 100644 --- a/auto/os/freebsd +++ b/auto/os/freebsd @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. have=NGX_FREEBSD . auto/have_headers diff --git a/auto/os/linux b/auto/os/linux index 394cd87bc..0b2173cae 100644 --- a/auto/os/linux +++ b/auto/os/linux @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. have=NGX_LINUX . auto/have_headers diff --git a/auto/os/solaris b/auto/os/solaris index 333f0aebd..16da4b3fd 100644 --- a/auto/os/solaris +++ b/auto/os/solaris @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. have=NGX_SOLARIS . auto/have_headers diff --git a/auto/os/win32 b/auto/os/win32 index 02b261cea..21a54ba11 100644 --- a/auto/os/win32 +++ b/auto/os/win32 @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. have=NGX_WIN32 . auto/have_headers diff --git a/auto/sources b/auto/sources index 38b3f40af..c48c3adf4 100644 --- a/auto/sources +++ b/auto/sources @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. CORE_MODULES="ngx_core_module ngx_errlog_module ngx_conf_module" diff --git a/auto/stubs b/auto/stubs index 0031eaf87..d8bc1f0e0 100644 --- a/auto/stubs +++ b/auto/stubs @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. have=NGX_SUPPRESS_WARN . auto/have diff --git a/auto/summary b/auto/summary index c65946c31..dcebec9f0 100644 --- a/auto/summary +++ b/auto/summary @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. ### STUB diff --git a/auto/types/sizeof b/auto/types/sizeof index 4d65dca16..e84a0905e 100644 --- a/auto/types/sizeof +++ b/auto/types/sizeof @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo $ngx_n "checking for $ngx_type size ...$ngx_c" diff --git a/auto/types/typedef b/auto/types/typedef index 884ef25d7..f121e8fc2 100644 --- a/auto/types/typedef +++ b/auto/types/typedef @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo $ngx_n "checking for $ngx_type ...$ngx_c" diff --git a/auto/types/uintptr_t b/auto/types/uintptr_t index 55024b820..07f7e7d7d 100644 --- a/auto/types/uintptr_t +++ b/auto/types/uintptr_t @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. echo $ngx_n "checking for uintptr_t ...$ngx_c" diff --git a/auto/types/value b/auto/types/value index 698ba7d92..ac88a3919 100644 --- a/auto/types/value +++ b/auto/types/value @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. cat << END >> $NGX_AUTO_CONFIG_H diff --git a/auto/unix b/auto/unix index 67b7a9083..398b9bec4 100755 --- a/auto/unix +++ b/auto/unix @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. NGX_USER=${NGX_USER:-nobody} diff --git a/configure b/configure index 6be54f7b2..45ea15473 100755 --- a/configure +++ b/configure @@ -1,6 +1,7 @@ #!/bin/sh # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. . auto/options diff --git a/man/nginx.8 b/man/nginx.8 index aba20c1a3..587fb457f 100644 --- a/man/nginx.8 +++ b/man/nginx.8 @@ -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 diff --git a/src/core/nginx.c b/src/core/nginx.c index 5de48351a..e8fcbaeba 100644 --- a/src/core/nginx.c +++ b/src/core/nginx.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/nginx.h b/src/core/nginx.h index a67b6c2aa..3105fa349 100644 --- a/src/core/nginx.h +++ b/src/core/nginx.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ @@ -8,8 +9,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" diff --git a/src/core/ngx_array.c b/src/core/ngx_array.c index a536d87b5..4627a9912 100644 --- a/src/core/ngx_array.c +++ b/src/core/ngx_array.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_array.h b/src/core/ngx_array.h index 00206cb1b..6a60e3088 100644 --- a/src/core/ngx_array.h +++ b/src/core/ngx_array.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_buf.c b/src/core/ngx_buf.c index 53cd50cea..835c76ced 100644 --- a/src/core/ngx_buf.c +++ b/src/core/ngx_buf.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_buf.h b/src/core/ngx_buf.h index a6bf39ff3..ffc531094 100644 --- a/src/core/ngx_buf.h +++ b/src/core/ngx_buf.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c index 689b7e7a2..832650141 100644 --- a/src/core/ngx_conf_file.c +++ b/src/core/ngx_conf_file.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_conf_file.h b/src/core/ngx_conf_file.h index 86c60a43c..e92668cd4 100644 --- a/src/core/ngx_conf_file.h +++ b/src/core/ngx_conf_file.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_config.h b/src/core/ngx_config.h index 9762b18ca..b0cb17fca 100644 --- a/src/core/ngx_config.h +++ b/src/core/ngx_config.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_connection.c b/src/core/ngx_connection.c index 9dc551090..6e09eb80a 100644 --- a/src/core/ngx_connection.c +++ b/src/core/ngx_connection.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_connection.h b/src/core/ngx_connection.h index 9e3ca52fb..34af12e4f 100644 --- a/src/core/ngx_connection.h +++ b/src/core/ngx_connection.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_core.h b/src/core/ngx_core.h index 9f1790153..1ae55163d 100644 --- a/src/core/ngx_core.h +++ b/src/core/ngx_core.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_cpuinfo.c b/src/core/ngx_cpuinfo.c index 39a6b05a0..72053192f 100644 --- a/src/core/ngx_cpuinfo.c +++ b/src/core/ngx_cpuinfo.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_crc.h b/src/core/ngx_crc.h index c77f037ab..35981bc15 100644 --- a/src/core/ngx_crc.h +++ b/src/core/ngx_crc.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_crc32.c b/src/core/ngx_crc32.c index 624510cee..a5b4017b8 100644 --- a/src/core/ngx_crc32.c +++ b/src/core/ngx_crc32.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_crc32.h b/src/core/ngx_crc32.h index 4435e4517..f6d6865b5 100644 --- a/src/core/ngx_crc32.h +++ b/src/core/ngx_crc32.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_crypt.h b/src/core/ngx_crypt.h index 45ef81d4b..386911428 100644 --- a/src/core/ngx_crypt.h +++ b/src/core/ngx_crypt.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c index 525ef41d7..2da0bf91a 100644 --- a/src/core/ngx_cycle.c +++ b/src/core/ngx_cycle.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_cycle.h b/src/core/ngx_cycle.h index e14983d6f..dbc6e195e 100644 --- a/src/core/ngx_cycle.h +++ b/src/core/ngx_cycle.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_file.c b/src/core/ngx_file.c index 7704c3e17..ce3a0a282 100644 --- a/src/core/ngx_file.c +++ b/src/core/ngx_file.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_file.h b/src/core/ngx_file.h index 88035172d..7023e6778 100644 --- a/src/core/ngx_file.h +++ b/src/core/ngx_file.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_hash.c b/src/core/ngx_hash.c index 74d89b8b9..7d04f7484 100644 --- a/src/core/ngx_hash.c +++ b/src/core/ngx_hash.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_hash.h b/src/core/ngx_hash.h index beabcb7c3..abc3cbe5d 100644 --- a/src/core/ngx_hash.h +++ b/src/core/ngx_hash.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c index 4baa74aee..2785c8c8c 100644 --- a/src/core/ngx_inet.c +++ b/src/core/ngx_inet.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_inet.h b/src/core/ngx_inet.h index 0b42abd8a..c5a3d7677 100644 --- a/src/core/ngx_inet.h +++ b/src/core/ngx_inet.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_list.c b/src/core/ngx_list.c index 84bc00263..89ea82352 100644 --- a/src/core/ngx_list.c +++ b/src/core/ngx_list.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_list.h b/src/core/ngx_list.h index 75db86886..e0fe6436b 100644 --- a/src/core/ngx_list.h +++ b/src/core/ngx_list.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_log.c b/src/core/ngx_log.c index e7d597e7e..d7830fb4b 100644 --- a/src/core/ngx_log.c +++ b/src/core/ngx_log.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_log.h b/src/core/ngx_log.h index 9e00e30ee..323364786 100644 --- a/src/core/ngx_log.h +++ b/src/core/ngx_log.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_md5.h b/src/core/ngx_md5.h index 45a1011bb..18d09d6d5 100644 --- a/src/core/ngx_md5.h +++ b/src/core/ngx_md5.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_murmurhash.h b/src/core/ngx_murmurhash.h index ae40779d4..2b2b70d6c 100644 --- a/src/core/ngx_murmurhash.h +++ b/src/core/ngx_murmurhash.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_open_file_cache.c b/src/core/ngx_open_file_cache.c index 0d605b527..9ac552111 100644 --- a/src/core/ngx_open_file_cache.c +++ b/src/core/ngx_open_file_cache.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_open_file_cache.h b/src/core/ngx_open_file_cache.h index 638bc5dd1..436de3060 100644 --- a/src/core/ngx_open_file_cache.h +++ b/src/core/ngx_open_file_cache.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_output_chain.c b/src/core/ngx_output_chain.c index e45f0342d..3cb60ea73 100644 --- a/src/core/ngx_output_chain.c +++ b/src/core/ngx_output_chain.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_palloc.c b/src/core/ngx_palloc.c index 9eac114b7..efbc24452 100644 --- a/src/core/ngx_palloc.c +++ b/src/core/ngx_palloc.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_palloc.h b/src/core/ngx_palloc.h index 6e6612cca..d65282910 100644 --- a/src/core/ngx_palloc.h +++ b/src/core/ngx_palloc.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_parse.c b/src/core/ngx_parse.c index dff59ff60..da24f4c75 100644 --- a/src/core/ngx_parse.c +++ b/src/core/ngx_parse.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_parse.h b/src/core/ngx_parse.h index e770623fd..0c8114fb6 100644 --- a/src/core/ngx_parse.h +++ b/src/core/ngx_parse.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_queue.c b/src/core/ngx_queue.c index a49b5c663..3cacaf3a8 100644 --- a/src/core/ngx_queue.c +++ b/src/core/ngx_queue.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_queue.h b/src/core/ngx_queue.h index 9a1763d7b..038bf1211 100644 --- a/src/core/ngx_queue.h +++ b/src/core/ngx_queue.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_radix_tree.c b/src/core/ngx_radix_tree.c index f339e6fab..b95cbc013 100644 --- a/src/core/ngx_radix_tree.c +++ b/src/core/ngx_radix_tree.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_radix_tree.h b/src/core/ngx_radix_tree.h index 02a9f383b..65ee69b26 100644 --- a/src/core/ngx_radix_tree.h +++ b/src/core/ngx_radix_tree.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_rbtree.c b/src/core/ngx_rbtree.c index 749b601f2..6ae4d5c05 100644 --- a/src/core/ngx_rbtree.c +++ b/src/core/ngx_rbtree.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_rbtree.h b/src/core/ngx_rbtree.h index 8531afcea..6e47a5bbb 100644 --- a/src/core/ngx_rbtree.h +++ b/src/core/ngx_rbtree.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_regex.c b/src/core/ngx_regex.c index fc5296ac1..677f862bf 100644 --- a/src/core/ngx_regex.c +++ b/src/core/ngx_regex.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ @@ -15,6 +16,9 @@ typedef struct { 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); @@ -273,6 +277,41 @@ ngx_regex_free(void *p) } +#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) { @@ -286,12 +325,27 @@ ngx_regex_module_init(ngx_cycle_t *cycle) #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 @@ -402,7 +456,7 @@ ngx_regex_pcre_jit(ngx_conf_t *cf, void *post, void *data) } #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 diff --git a/src/core/ngx_regex.h b/src/core/ngx_regex.h index 52d059e5c..55bd331bb 100644 --- a/src/core/ngx_regex.h +++ b/src/core/ngx_regex.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c index d4af2f016..6ab0ddb51 100644 --- a/src/core/ngx_resolver.c +++ b/src/core/ngx_resolver.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_resolver.h b/src/core/ngx_resolver.h index a2ddbefae..ae34ca56d 100644 --- a/src/core/ngx_resolver.h +++ b/src/core/ngx_resolver.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_sha1.h b/src/core/ngx_sha1.h index f158fd4dc..81c909e2f 100644 --- a/src/core/ngx_sha1.h +++ b/src/core/ngx_sha1.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_shmtx.c b/src/core/ngx_shmtx.c index 8a3178e61..085294a91 100644 --- a/src/core/ngx_shmtx.c +++ b/src/core/ngx_shmtx.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_shmtx.h b/src/core/ngx_shmtx.h index 3ee7d3a79..830b6f5b1 100644 --- a/src/core/ngx_shmtx.h +++ b/src/core/ngx_shmtx.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_slab.c b/src/core/ngx_slab.c index c7b687649..3d5660377 100644 --- a/src/core/ngx_slab.c +++ b/src/core/ngx_slab.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ #include diff --git a/src/core/ngx_slab.h b/src/core/ngx_slab.h index 202fd9380..c5e420bfa 100644 --- a/src/core/ngx_slab.h +++ b/src/core/ngx_slab.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_spinlock.c b/src/core/ngx_spinlock.c index f6c80f769..9c93afaf1 100644 --- a/src/core/ngx_spinlock.c +++ b/src/core/ngx_spinlock.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_string.c b/src/core/ngx_string.c index f5e1d4bf3..1dec96cc4 100644 --- a/src/core/ngx_string.c +++ b/src/core/ngx_string.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_string.h b/src/core/ngx_string.h index 2b9c59a5e..fa386ca72 100644 --- a/src/core/ngx_string.h +++ b/src/core/ngx_string.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_times.c b/src/core/ngx_times.c index f1685aaf6..745a4bd1b 100644 --- a/src/core/ngx_times.c +++ b/src/core/ngx_times.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/core/ngx_times.h b/src/core/ngx_times.h index 7f2fafd54..c4b26a2ed 100644 --- a/src/core/ngx_times.h +++ b/src/core/ngx_times.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/modules/ngx_aio_module.c b/src/event/modules/ngx_aio_module.c index 71f7d40c6..c881319d1 100644 --- a/src/event/modules/ngx_aio_module.c +++ b/src/event/modules/ngx_aio_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/modules/ngx_devpoll_module.c b/src/event/modules/ngx_devpoll_module.c index e88c999b8..d09b5bc07 100644 --- a/src/event/modules/ngx_devpoll_module.c +++ b/src/event/modules/ngx_devpoll_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/modules/ngx_epoll_module.c b/src/event/modules/ngx_epoll_module.c index f4003af70..ddf178927 100644 --- a/src/event/modules/ngx_epoll_module.c +++ b/src/event/modules/ngx_epoll_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/modules/ngx_eventport_module.c b/src/event/modules/ngx_eventport_module.c index f4f0119a5..0bfb47e5c 100644 --- a/src/event/modules/ngx_eventport_module.c +++ b/src/event/modules/ngx_eventport_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c index d78e56259..c0f70752f 100644 --- a/src/event/modules/ngx_kqueue_module.c +++ b/src/event/modules/ngx_kqueue_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/modules/ngx_poll_module.c b/src/event/modules/ngx_poll_module.c index ea947b7e5..ed64bc51a 100644 --- a/src/event/modules/ngx_poll_module.c +++ b/src/event/modules/ngx_poll_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/modules/ngx_rtsig_module.c b/src/event/modules/ngx_rtsig_module.c index 4b011007b..2f0f9970f 100644 --- a/src/event/modules/ngx_rtsig_module.c +++ b/src/event/modules/ngx_rtsig_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/modules/ngx_select_module.c b/src/event/modules/ngx_select_module.c index 72dbe74bd..ed71368e9 100644 --- a/src/event/modules/ngx_select_module.c +++ b/src/event/modules/ngx_select_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/modules/ngx_win32_select_module.c b/src/event/modules/ngx_win32_select_module.c index 3d75d69a9..0a02ffca0 100644 --- a/src/event/modules/ngx_win32_select_module.c +++ b/src/event/modules/ngx_win32_select_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c index 7d297d96b..3d83b8e75 100644 --- a/src/event/ngx_event.c +++ b/src/event/ngx_event.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h index 778da529d..aa2183a22 100644 --- a/src/event/ngx_event.h +++ b/src/event/ngx_event.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c index 2355d1bda..a45afeb1f 100644 --- a/src/event/ngx_event_accept.c +++ b/src/event/ngx_event_accept.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/ngx_event_busy_lock.c b/src/event/ngx_event_busy_lock.c index 249e20563..fdac0da8f 100644 --- a/src/event/ngx_event_busy_lock.c +++ b/src/event/ngx_event_busy_lock.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/ngx_event_busy_lock.h b/src/event/ngx_event_busy_lock.h index 3e767704a..254c233e7 100644 --- a/src/event/ngx_event_busy_lock.h +++ b/src/event/ngx_event_busy_lock.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c index fb8fd2110..978f39b42 100644 --- a/src/event/ngx_event_connect.c +++ b/src/event/ngx_event_connect.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ @@ -159,6 +160,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 +244,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; } diff --git a/src/event/ngx_event_connect.h b/src/event/ngx_event_connect.h index d64f1bb10..951c24f41 100644 --- a/src/event/ngx_event_connect.h +++ b/src/event/ngx_event_connect.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/ngx_event_mutex.c b/src/event/ngx_event_mutex.c index 2335e5baf..2bdfd5b4e 100644 --- a/src/event/ngx_event_mutex.c +++ b/src/event/ngx_event_mutex.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c index 43d34a622..f393334ad 100644 --- a/src/event/ngx_event_openssl.c +++ b/src/event/ngx_event_openssl.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ @@ -91,8 +92,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); diff --git a/src/event/ngx_event_openssl.h b/src/event/ngx_event_openssl.h index 0b5b7c8de..cd6d88518 100644 --- a/src/event/ngx_event_openssl.h +++ b/src/event/ngx_event_openssl.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/ngx_event_pipe.c b/src/event/ngx_event_pipe.c index c389f2eba..62358ead1 100644 --- a/src/event/ngx_event_pipe.c +++ b/src/event/ngx_event_pipe.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/ngx_event_pipe.h b/src/event/ngx_event_pipe.h index 8f55431e8..f24e6d148 100644 --- a/src/event/ngx_event_pipe.h +++ b/src/event/ngx_event_pipe.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/ngx_event_posted.c b/src/event/ngx_event_posted.c index a7b09fdd6..e548145ed 100644 --- a/src/event/ngx_event_posted.c +++ b/src/event/ngx_event_posted.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/ngx_event_posted.h b/src/event/ngx_event_posted.h index f9c55e5a3..abd2e261d 100644 --- a/src/event/ngx_event_posted.h +++ b/src/event/ngx_event_posted.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c index 76a1a1f41..7a8107209 100644 --- a/src/event/ngx_event_timer.c +++ b/src/event/ngx_event_timer.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/event/ngx_event_timer.h b/src/event/ngx_event_timer.h index 61ffeaefe..ec9b316bd 100644 --- a/src/event/ngx_event_timer.h +++ b/src/event/ngx_event_timer.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_access_module.c b/src/http/modules/ngx_http_access_module.c index a28ebf7b7..84a75d777 100644 --- a/src/http/modules/ngx_http_access_module.c +++ b/src/http/modules/ngx_http_access_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_addition_filter_module.c b/src/http/modules/ngx_http_addition_filter_module.c index 9b22a0a12..24747c564 100644 --- a/src/http/modules/ngx_http_addition_filter_module.c +++ b/src/http/modules/ngx_http_addition_filter_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_auth_basic_module.c b/src/http/modules/ngx_http_auth_basic_module.c index 45168de84..ec3b1cf95 100644 --- a/src/http/modules/ngx_http_auth_basic_module.c +++ b/src/http/modules/ngx_http_auth_basic_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_autoindex_module.c b/src/http/modules/ngx_http_autoindex_module.c index bd7388126..9b54d0cf9 100644 --- a/src/http/modules/ngx_http_autoindex_module.c +++ b/src/http/modules/ngx_http_autoindex_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_browser_module.c b/src/http/modules/ngx_http_browser_module.c index d400fec7f..13a714538 100644 --- a/src/http/modules/ngx_http_browser_module.c +++ b/src/http/modules/ngx_http_browser_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_charset_filter_module.c b/src/http/modules/ngx_http_charset_filter_module.c index a6f9afcae..27a00d09a 100644 --- a/src/http/modules/ngx_http_charset_filter_module.c +++ b/src/http/modules/ngx_http_charset_filter_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_chunked_filter_module.c b/src/http/modules/ngx_http_chunked_filter_module.c index e6ae1c99d..94313a8f6 100644 --- a/src/http/modules/ngx_http_chunked_filter_module.c +++ b/src/http/modules/ngx_http_chunked_filter_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_dav_module.c b/src/http/modules/ngx_http_dav_module.c index 3bd9d3e94..dbb17ac30 100644 --- a/src/http/modules/ngx_http_dav_module.c +++ b/src/http/modules/ngx_http_dav_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_degradation_module.c b/src/http/modules/ngx_http_degradation_module.c index a5f83bb20..0b1368f3b 100644 --- a/src/http/modules/ngx_http_degradation_module.c +++ b/src/http/modules/ngx_http_degradation_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_empty_gif_module.c b/src/http/modules/ngx_http_empty_gif_module.c index 7cef538ac..04114dc3f 100644 --- a/src/http/modules/ngx_http_empty_gif_module.c +++ b/src/http/modules/ngx_http_empty_gif_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ #include diff --git a/src/http/modules/ngx_http_fastcgi_module.c b/src/http/modules/ngx_http_fastcgi_module.c index 4a62f7197..78ebadc05 100644 --- a/src/http/modules/ngx_http_fastcgi_module.c +++ b/src/http/modules/ngx_http_fastcgi_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_flv_module.c b/src/http/modules/ngx_http_flv_module.c index 30af834ab..f6870235b 100644 --- a/src/http/modules/ngx_http_flv_module.c +++ b/src/http/modules/ngx_http_flv_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ #include diff --git a/src/http/modules/ngx_http_geo_module.c b/src/http/modules/ngx_http_geo_module.c index 7c5019605..1d7599e55 100644 --- a/src/http/modules/ngx_http_geo_module.c +++ b/src/http/modules/ngx_http_geo_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_geoip_module.c b/src/http/modules/ngx_http_geoip_module.c index 311a30ce3..60d67574d 100644 --- a/src/http/modules/ngx_http_geoip_module.c +++ b/src/http/modules/ngx_http_geoip_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_gzip_filter_module.c b/src/http/modules/ngx_http_gzip_filter_module.c index 18824059a..4429e01ba 100644 --- a/src/http/modules/ngx_http_gzip_filter_module.c +++ b/src/http/modules/ngx_http_gzip_filter_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_gzip_static_module.c b/src/http/modules/ngx_http_gzip_static_module.c index 9e3b1ad66..18c28d8f5 100644 --- a/src/http/modules/ngx_http_gzip_static_module.c +++ b/src/http/modules/ngx_http_gzip_static_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_headers_filter_module.c b/src/http/modules/ngx_http_headers_filter_module.c index 754473355..daa17623c 100644 --- a/src/http/modules/ngx_http_headers_filter_module.c +++ b/src/http/modules/ngx_http_headers_filter_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_image_filter_module.c b/src/http/modules/ngx_http_image_filter_module.c index 66ed34541..dd3c9cee5 100644 --- a/src/http/modules/ngx_http_image_filter_module.c +++ b/src/http/modules/ngx_http_image_filter_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_index_module.c b/src/http/modules/ngx_http_index_module.c index 15aeaf9c6..0835a7cf8 100644 --- a/src/http/modules/ngx_http_index_module.c +++ b/src/http/modules/ngx_http_index_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_limit_conn_module.c b/src/http/modules/ngx_http_limit_conn_module.c index 40f05a22e..f98e7bc51 100644 --- a/src/http/modules/ngx_http_limit_conn_module.c +++ b/src/http/modules/ngx_http_limit_conn_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_limit_req_module.c b/src/http/modules/ngx_http_limit_req_module.c index 779b397c2..e4d90a98f 100644 --- a/src/http/modules/ngx_http_limit_req_module.c +++ b/src/http/modules/ngx_http_limit_req_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ @@ -17,6 +18,7 @@ typedef struct { 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; @@ -35,6 +37,7 @@ typedef struct { 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; @@ -42,16 +45,23 @@ typedef struct { 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); @@ -135,123 +145,124 @@ ngx_module_t ngx_http_limit_req_module = { static ngx_int_t ngx_http_limit_req_handler(ngx_http_request_t *r) { - size_t len, n; - 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; + 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); +#if (NGX_SUPPRESS_WARN) + limit = NULL; +#endif - if (vv == NULL || vv->not_found) { - return NGX_DECLINED; - } + for (n = 0; n < lrcf->limits.nelts; n++) { - len = vv->len; + limit = &limits[n]; - if (len == 0) { - return NGX_DECLINED; - } + ctx = limit->shm_zone->data; - 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; - } + vv = ngx_http_get_indexed_variable(r, ctx->index); - r->main->limit_req_set = 1; - - hash = ngx_crc32_short(vv->data, len); + if (vv == NULL || vv->not_found) { + continue; + } - ngx_shmtx_lock(&ctx->shpool->mutex); + len = vv->len; - ngx_http_limit_req_expire(ctx, 1); + if (len == 0) { + continue; + } - rc = ngx_http_limit_req_lookup(lrcf, hash, vv->data, len, &excess); + 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; + } - ngx_log_debug3(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, - "limit_req: %i %ui.%03ui", rc, excess / 1000, excess % 1000); + hash = ngx_crc32_short(vv->data, len); - if (rc == NGX_DECLINED) { + ngx_shmtx_lock(&ctx->shpool->mutex); - n = offsetof(ngx_rbtree_node_t, color) - + offsetof(ngx_http_limit_req_node_t, data) - + len; + rc = ngx_http_limit_req_lookup(limit, hash, vv->data, len, &excess, + (n == lrcf->limits.nelts - 1)); - node = ngx_slab_alloc_locked(ctx->shpool, n); - if (node == NULL) { + ngx_shmtx_unlock(&ctx->shpool->mutex); - ngx_http_limit_req_expire(ctx, 0); + ngx_log_debug4(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, + "limit_req[%ui]: %i %ui.%03ui", + n, rc, excess / 1000, excess % 1000); - node = ngx_slab_alloc_locked(ctx->shpool, n); - if (node == NULL) { - ngx_shmtx_unlock(&ctx->shpool->mutex); - return NGX_HTTP_SERVICE_UNAVAILABLE; - } + if (rc != NGX_AGAIN) { + break; } + } - lr = (ngx_http_limit_req_node_t *) &node->color; + if (rc == NGX_DECLINED) { + return NGX_DECLINED; + } - node->key = hash; - lr->len = (u_char) len; + r->main->limit_req_set = 1; - tp = ngx_timeofday(); - lr->last = (ngx_msec_t) (tp->sec * 1000 + tp->msec); + if (rc == NGX_BUSY || rc == NGX_ERROR) { - lr->excess = 0; - ngx_memcpy(lr->data, vv->data, len); + 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, + &limit->shm_zone->shm.name); + } - ngx_rbtree_insert(&ctx->sh->rbtree, node); + while (n--) { + ctx = limits[n].shm_zone->data; - ngx_queue_insert_head(&ctx->sh->queue, &lr->queue); + if (ctx->node == NULL) { + continue; + } - ngx_shmtx_unlock(&ctx->shpool->mutex); + ngx_shmtx_lock(&ctx->shpool->mutex); - return NGX_DECLINED; - } + ctx->node->count--; - ngx_shmtx_unlock(&ctx->shpool->mutex); + ngx_shmtx_unlock(&ctx->shpool->mutex); - if (rc == NGX_OK) { - return NGX_DECLINED; + ctx->node = NULL; + } + + return NGX_HTTP_SERVICE_UNAVAILABLE; } - 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); + /* rc == NGX_AGAIN || rc == NGX_OK */ - return NGX_HTTP_SERVICE_UNAVAILABLE; + if (rc == NGX_AGAIN) { + excess = 0; } - /* rc == NGX_AGAIN */ + delay = ngx_http_limit_req_account(limits, n, &excess, &limit); - if (lrcf->nodelay) { + 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; @@ -259,8 +270,7 @@ ngx_http_limit_req_handler(ngx_http_request_t *r) 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; } @@ -341,9 +351,10 @@ ngx_http_limit_req_rbtree_insert_value(ngx_rbtree_node_t *temp, 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; ngx_time_t *tp; ngx_msec_t now; @@ -352,7 +363,10 @@ ngx_http_limit_req_lookup(ngx_http_limit_req_conf_t *lrcf, ngx_uint_t hash, ngx_http_limit_req_ctx_t *ctx; ngx_http_limit_req_node_t *lr; - ctx = lrcf->shm_zone->data; + tp = ngx_timeofday(); + now = (ngx_msec_t) (tp->sec * 1000 + tp->msec); + + ctx = limit->shm_zone->data; node = ctx->sh->rbtree.root; sentinel = ctx->sh->rbtree.sentinel; @@ -380,9 +394,6 @@ ngx_http_limit_req_lookup(ngx_http_limit_req_conf_t *lrcf, ngx_uint_t hash, 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; @@ -393,18 +404,21 @@ ngx_http_limit_req_lookup(ngx_http_limit_req_conf_t *lrcf, ngx_uint_t hash, *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; @@ -416,7 +430,115 @@ ngx_http_limit_req_lookup(ngx_http_limit_req_conf_t *lrcf, ngx_uint_t hash, *ep = 0; - return NGX_DECLINED; + size = offsetof(ngx_rbtree_node_t, color) + + 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) { + 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; + + ngx_memcpy(lr->data, data, len); + + 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; } @@ -451,6 +573,16 @@ ngx_http_limit_req_expire(ngx_http_limit_req_ctx_t *ctx, ngx_uint_t n) 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); @@ -551,9 +683,7 @@ ngx_http_limit_req_create_conf(ngx_conf_t *cf) /* * 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; @@ -568,10 +698,8 @@ ngx_http_limit_req_merge_conf(ngx_conf_t *cf, void *parent, void *child) 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, @@ -588,7 +716,8 @@ static char * 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; @@ -611,25 +740,32 @@ ngx_http_limit_req_zone(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) 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) { @@ -681,7 +817,7 @@ ngx_http_limit_req_zone(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) 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); @@ -690,8 +826,8 @@ ngx_http_limit_req_zone(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) 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; } @@ -707,8 +843,8 @@ ngx_http_limit_req_zone(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) 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; } @@ -724,17 +860,17 @@ ngx_http_limit_req(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { ngx_http_limit_req_conf_t *lrcf = conf; - ngx_int_t burst; - ngx_str_t *value, s; - ngx_uint_t i; - - if (lrcf->shm_zone) { - return "is duplicate"; - } + 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; value = cf->args->elts; + shm_zone = NULL; burst = 0; + nodelay = 0; for (i = 1; i < cf->args->nelts; i++) { @@ -743,9 +879,9 @@ ngx_http_limit_req(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) 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; } @@ -765,7 +901,7 @@ ngx_http_limit_req(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) } if (ngx_strncmp(value[i].data, "nodelay", 7) == 0) { - lrcf->nodelay = 1; + nodelay = 1; continue; } @@ -774,21 +910,42 @@ ngx_http_limit_req(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) 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; } diff --git a/src/http/modules/ngx_http_log_module.c b/src/http/modules/ngx_http_log_module.c index cb9c77f6f..c55131772 100644 --- a/src/http/modules/ngx_http_log_module.c +++ b/src/http/modules/ngx_http_log_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_map_module.c b/src/http/modules/ngx_http_map_module.c index 6b724b304..2fe925f1c 100644 --- a/src/http/modules/ngx_http_map_module.c +++ b/src/http/modules/ngx_http_map_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_memcached_module.c b/src/http/modules/ngx_http_memcached_module.c index dbe0fe838..be45d4eeb 100644 --- a/src/http/modules/ngx_http_memcached_module.c +++ b/src/http/modules/ngx_http_memcached_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_mp4_module.c b/src/http/modules/ngx_http_mp4_module.c index 6de7c8fea..816cc4c83 100644 --- a/src/http/modules/ngx_http_mp4_module.c +++ b/src/http/modules/ngx_http_mp4_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ #include diff --git a/src/http/modules/ngx_http_not_modified_filter_module.c b/src/http/modules/ngx_http_not_modified_filter_module.c index a778c70dc..488c36b72 100644 --- a/src/http/modules/ngx_http_not_modified_filter_module.c +++ b/src/http/modules/ngx_http_not_modified_filter_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_proxy_module.c b/src/http/modules/ngx_http_proxy_module.c index b6aa38b53..fb86f0106 100644 --- a/src/http/modules/ngx_http_proxy_module.c +++ b/src/http/modules/ngx_http_proxy_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ @@ -3291,6 +3292,8 @@ ngx_http_proxy_redirect(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) return NGX_CONF_OK; } + plcf->redirect = 1; + value = cf->args->elts; if (cf->args->nelts == 2) { diff --git a/src/http/modules/ngx_http_random_index_module.c b/src/http/modules/ngx_http_random_index_module.c index 02bdc45f9..67f34f739 100644 --- a/src/http/modules/ngx_http_random_index_module.c +++ b/src/http/modules/ngx_http_random_index_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_range_filter_module.c b/src/http/modules/ngx_http_range_filter_module.c index 02d2bf925..3380e5e0e 100644 --- a/src/http/modules/ngx_http_range_filter_module.c +++ b/src/http/modules/ngx_http_range_filter_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_realip_module.c b/src/http/modules/ngx_http_realip_module.c index b88b12242..bb606beb7 100644 --- a/src/http/modules/ngx_http_realip_module.c +++ b/src/http/modules/ngx_http_realip_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_referer_module.c b/src/http/modules/ngx_http_referer_module.c index cf2d744f1..d8a014c5b 100644 --- a/src/http/modules/ngx_http_referer_module.c +++ b/src/http/modules/ngx_http_referer_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_rewrite_module.c b/src/http/modules/ngx_http_rewrite_module.c index 2ef24405c..98da67f27 100644 --- a/src/http/modules/ngx_http_rewrite_module.c +++ b/src/http/modules/ngx_http_rewrite_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_scgi_module.c b/src/http/modules/ngx_http_scgi_module.c index 2ab9ee85c..538557377 100644 --- a/src/http/modules/ngx_http_scgi_module.c +++ b/src/http/modules/ngx_http_scgi_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. * Copyright (C) Manlio Perillo (manlio.perillo@gmail.com) */ diff --git a/src/http/modules/ngx_http_secure_link_module.c b/src/http/modules/ngx_http_secure_link_module.c index 6c4be6191..b69b5526f 100644 --- a/src/http/modules/ngx_http_secure_link_module.c +++ b/src/http/modules/ngx_http_secure_link_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_split_clients_module.c b/src/http/modules/ngx_http_split_clients_module.c index 0b726f777..f2160b149 100644 --- a/src/http/modules/ngx_http_split_clients_module.c +++ b/src/http/modules/ngx_http_split_clients_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_ssi_filter_module.c b/src/http/modules/ngx_http_ssi_filter_module.c index e33782166..b02300f39 100644 --- a/src/http/modules/ngx_http_ssi_filter_module.c +++ b/src/http/modules/ngx_http_ssi_filter_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_ssi_filter_module.h b/src/http/modules/ngx_http_ssi_filter_module.h index 2b0018662..0bd01a067 100644 --- a/src/http/modules/ngx_http_ssi_filter_module.h +++ b/src/http/modules/ngx_http_ssi_filter_module.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_ssl_module.c b/src/http/modules/ngx_http_ssl_module.c index 17a5b8de2..d759489a6 100644 --- a/src/http/modules/ngx_http_ssl_module.c +++ b/src/http/modules/ngx_http_ssl_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_ssl_module.h b/src/http/modules/ngx_http_ssl_module.h index 0a5dd1d8d..58659ab95 100644 --- a/src/http/modules/ngx_http_ssl_module.h +++ b/src/http/modules/ngx_http_ssl_module.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_static_module.c b/src/http/modules/ngx_http_static_module.c index cea050a94..a0e302ad1 100644 --- a/src/http/modules/ngx_http_static_module.c +++ b/src/http/modules/ngx_http_static_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_stub_status_module.c b/src/http/modules/ngx_http_stub_status_module.c index 4b74eb884..f78086981 100644 --- a/src/http/modules/ngx_http_stub_status_module.c +++ b/src/http/modules/ngx_http_stub_status_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_sub_filter_module.c b/src/http/modules/ngx_http_sub_filter_module.c index ddc69ba52..be5e90c4e 100644 --- a/src/http/modules/ngx_http_sub_filter_module.c +++ b/src/http/modules/ngx_http_sub_filter_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_upstream_ip_hash_module.c b/src/http/modules/ngx_http_upstream_ip_hash_module.c index 4c031eb47..100ea34dd 100644 --- a/src/http/modules/ngx_http_upstream_ip_hash_module.c +++ b/src/http/modules/ngx_http_upstream_ip_hash_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_upstream_keepalive_module.c b/src/http/modules/ngx_http_upstream_keepalive_module.c index 945f78b15..6fd9ac70a 100644 --- a/src/http/modules/ngx_http_upstream_keepalive_module.c +++ b/src/http/modules/ngx_http_upstream_keepalive_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Maxim Dounin + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_userid_filter_module.c b/src/http/modules/ngx_http_userid_filter_module.c index 195d9dc4f..894e2c14e 100644 --- a/src/http/modules/ngx_http_userid_filter_module.c +++ b/src/http/modules/ngx_http_userid_filter_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_uwsgi_module.c b/src/http/modules/ngx_http_uwsgi_module.c index f28d9aa0f..73bbdda4d 100644 --- a/src/http/modules/ngx_http_uwsgi_module.c +++ b/src/http/modules/ngx_http_uwsgi_module.c @@ -3,6 +3,7 @@ * Copyright (C) Unbit S.a.s. 2009-2010 * Copyright (C) 2008 Manlio Perillo (manlio.perillo@gmail.com) * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/ngx_http_xslt_filter_module.c b/src/http/modules/ngx_http_xslt_filter_module.c index d67ec8047..f86c30381 100644 --- a/src/http/modules/ngx_http_xslt_filter_module.c +++ b/src/http/modules/ngx_http_xslt_filter_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/perl/Makefile.PL b/src/http/modules/perl/Makefile.PL index c33b1fc72..6575f284c 100644 --- a/src/http/modules/perl/Makefile.PL +++ b/src/http/modules/perl/Makefile.PL @@ -1,5 +1,6 @@ # Copyright (C) Igor Sysoev +# Copyright (C) Nginx, Inc. use 5.006001; use ExtUtils::MakeMaker; diff --git a/src/http/modules/perl/nginx.pm b/src/http/modules/perl/nginx.pm index 01e977646..7f060d745 100644 --- a/src/http/modules/perl/nginx.pm +++ b/src/http/modules/perl/nginx.pm @@ -48,7 +48,7 @@ our @EXPORT = qw( HTTP_INSUFFICIENT_STORAGE ); -our $VERSION = '1.1.13'; +our $VERSION = '1.1.14'; require XSLoader; XSLoader::load('nginx', $VERSION); @@ -128,6 +128,7 @@ Igor Sysoev =head1 COPYRIGHT AND LICENSE Copyright (C) Igor Sysoev +Copyright (C) Nginx, Inc. =cut diff --git a/src/http/modules/perl/nginx.xs b/src/http/modules/perl/nginx.xs index e3a9dd5c9..dc69d509a 100644 --- a/src/http/modules/perl/nginx.xs +++ b/src/http/modules/perl/nginx.xs @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/perl/ngx_http_perl_module.c b/src/http/modules/perl/ngx_http_perl_module.c index d89e96a57..90e32e80e 100644 --- a/src/http/modules/perl/ngx_http_perl_module.c +++ b/src/http/modules/perl/ngx_http_perl_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/modules/perl/ngx_http_perl_module.h b/src/http/modules/perl/ngx_http_perl_module.h index 23969bcd4..5e60b031e 100644 --- a/src/http/modules/perl/ngx_http_perl_module.h +++ b/src/http/modules/perl/ngx_http_perl_module.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http.c b/src/http/ngx_http.c index e10dbc88d..27580f195 100644 --- a/src/http/ngx_http.c +++ b/src/http/ngx_http.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http.h b/src/http/ngx_http.h index 3c1a9d275..f152006a0 100644 --- a/src/http/ngx_http.h +++ b/src/http/ngx_http.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_busy_lock.c b/src/http/ngx_http_busy_lock.c index fd3824331..35a03acaa 100644 --- a/src/http/ngx_http_busy_lock.c +++ b/src/http/ngx_http_busy_lock.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_busy_lock.h b/src/http/ngx_http_busy_lock.h index d793e2966..c676382f2 100644 --- a/src/http/ngx_http_busy_lock.h +++ b/src/http/ngx_http_busy_lock.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_cache.h b/src/http/ngx_http_cache.h index ae8b8c376..2a2d72291 100644 --- a/src/http/ngx_http_cache.h +++ b/src/http/ngx_http_cache.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_config.h b/src/http/ngx_http_config.h index 435ce9a84..2208c601b 100644 --- a/src/http/ngx_http_config.h +++ b/src/http/ngx_http_config.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_copy_filter_module.c b/src/http/ngx_http_copy_filter_module.c index 0f9917e2e..d52fbebe8 100644 --- a/src/http/ngx_http_copy_filter_module.c +++ b/src/http/ngx_http_copy_filter_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ @@ -189,7 +190,7 @@ ngx_http_copy_filter(ngx_http_request_t *r, ngx_chain_t *in) 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/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c index 1d5ee5dc6..251f932fd 100644 --- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_core_module.h b/src/http/ngx_http_core_module.h index 73e39e3b9..38f58dfcb 100644 --- a/src/http/ngx_http_core_module.h +++ b/src/http/ngx_http_core_module.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_file_cache.c b/src/http/ngx_http_file_cache.c index dccbbac68..4840233ed 100644 --- a/src/http/ngx_http_file_cache.c +++ b/src/http/ngx_http_file_cache.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_header_filter_module.c b/src/http/ngx_http_header_filter_module.c index 2f8a38dad..1d8fee9d7 100644 --- a/src/http/ngx_http_header_filter_module.c +++ b/src/http/ngx_http_header_filter_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_parse.c b/src/http/ngx_http_parse.c index 28842cf9d..956259eef 100644 --- a/src/http/ngx_http_parse.c +++ b/src/http/ngx_http_parse.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_parse_time.c b/src/http/ngx_http_parse_time.c index 2e7b40add..7d3aeaeff 100644 --- a/src/http/ngx_http_parse_time.c +++ b/src/http/ngx_http_parse_time.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_postpone_filter_module.c b/src/http/ngx_http_postpone_filter_module.c index 156401b32..cf49b2fa8 100644 --- a/src/http/ngx_http_postpone_filter_module.c +++ b/src/http/ngx_http_postpone_filter_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c index fbb7915b3..2b3f0065b 100644 --- a/src/http/ngx_http_request.c +++ b/src/http/ngx_http_request.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_request.h b/src/http/ngx_http_request.h index e851efa03..220aa139b 100644 --- a/src/http/ngx_http_request.h +++ b/src/http/ngx_http_request.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_request_body.c b/src/http/ngx_http_request_body.c index 817b48e45..ac09d56f1 100644 --- a/src/http/ngx_http_request_body.c +++ b/src/http/ngx_http_request_body.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_script.c b/src/http/ngx_http_script.c index 6d81b4435..77ac9a629 100644 --- a/src/http/ngx_http_script.c +++ b/src/http/ngx_http_script.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_script.h b/src/http/ngx_http_script.h index c5b1e4066..46592ab01 100644 --- a/src/http/ngx_http_script.h +++ b/src/http/ngx_http_script.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_special_response.c b/src/http/ngx_http_special_response.c index d30b781e5..a07ebe28d 100644 --- a/src/http/ngx_http_special_response.c +++ b/src/http/ngx_http_special_response.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c index 781ef1f96..ba21c0135 100644 --- a/src/http/ngx_http_upstream.c +++ b/src/http/ngx_http_upstream.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_upstream.h b/src/http/ngx_http_upstream.h index 62cbf533e..d99b904fb 100644 --- a/src/http/ngx_http_upstream.h +++ b/src/http/ngx_http_upstream.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_upstream_round_robin.c b/src/http/ngx_http_upstream_round_robin.c index 138872c5f..410559d50 100644 --- a/src/http/ngx_http_upstream_round_robin.c +++ b/src/http/ngx_http_upstream_round_robin.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_upstream_round_robin.h b/src/http/ngx_http_upstream_round_robin.h index 195f4d8ca..4b70f2f5b 100644 --- a/src/http/ngx_http_upstream_round_robin.h +++ b/src/http/ngx_http_upstream_round_robin.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_variables.c b/src/http/ngx_http_variables.c index 840519ef9..d6bb92c98 100644 --- a/src/http/ngx_http_variables.c +++ b/src/http/ngx_http_variables.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_variables.h b/src/http/ngx_http_variables.h index b0114e300..d2bb4db88 100644 --- a/src/http/ngx_http_variables.h +++ b/src/http/ngx_http_variables.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/http/ngx_http_write_filter_module.c b/src/http/ngx_http_write_filter_module.c index a9660ee1f..72b1f9b2f 100644 --- a/src/http/ngx_http_write_filter_module.c +++ b/src/http/ngx_http_write_filter_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/mail/ngx_mail.c b/src/mail/ngx_mail.c index 0234d18ef..49ec2e05b 100644 --- a/src/mail/ngx_mail.c +++ b/src/mail/ngx_mail.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/mail/ngx_mail.h b/src/mail/ngx_mail.h index ca78d0553..1fceb4285 100644 --- a/src/mail/ngx_mail.h +++ b/src/mail/ngx_mail.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/mail/ngx_mail_auth_http_module.c b/src/mail/ngx_mail_auth_http_module.c index c82332690..c23c4bad7 100644 --- a/src/mail/ngx_mail_auth_http_module.c +++ b/src/mail/ngx_mail_auth_http_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/mail/ngx_mail_core_module.c b/src/mail/ngx_mail_core_module.c index 530bc5d49..2fb537a25 100644 --- a/src/mail/ngx_mail_core_module.c +++ b/src/mail/ngx_mail_core_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/mail/ngx_mail_handler.c b/src/mail/ngx_mail_handler.c index 0e37daf48..a1c4464f7 100644 --- a/src/mail/ngx_mail_handler.c +++ b/src/mail/ngx_mail_handler.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/mail/ngx_mail_imap_handler.c b/src/mail/ngx_mail_imap_handler.c index f15dbec80..57e2fb77d 100644 --- a/src/mail/ngx_mail_imap_handler.c +++ b/src/mail/ngx_mail_imap_handler.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/mail/ngx_mail_imap_module.c b/src/mail/ngx_mail_imap_module.c index daf2a433f..dc80b4fb4 100644 --- a/src/mail/ngx_mail_imap_module.c +++ b/src/mail/ngx_mail_imap_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/mail/ngx_mail_imap_module.h b/src/mail/ngx_mail_imap_module.h index c206ce05a..131b44597 100644 --- a/src/mail/ngx_mail_imap_module.h +++ b/src/mail/ngx_mail_imap_module.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/mail/ngx_mail_parse.c b/src/mail/ngx_mail_parse.c index 67f4d5edf..ae0f7e39a 100644 --- a/src/mail/ngx_mail_parse.c +++ b/src/mail/ngx_mail_parse.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/mail/ngx_mail_pop3_handler.c b/src/mail/ngx_mail_pop3_handler.c index 56726dbcf..0a073288d 100644 --- a/src/mail/ngx_mail_pop3_handler.c +++ b/src/mail/ngx_mail_pop3_handler.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/mail/ngx_mail_pop3_module.c b/src/mail/ngx_mail_pop3_module.c index 648c57ce8..b59747290 100644 --- a/src/mail/ngx_mail_pop3_module.c +++ b/src/mail/ngx_mail_pop3_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/mail/ngx_mail_pop3_module.h b/src/mail/ngx_mail_pop3_module.h index ce75c2a00..86947a772 100644 --- a/src/mail/ngx_mail_pop3_module.h +++ b/src/mail/ngx_mail_pop3_module.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/mail/ngx_mail_proxy_module.c b/src/mail/ngx_mail_proxy_module.c index 298e8d96a..4ea608cea 100644 --- a/src/mail/ngx_mail_proxy_module.c +++ b/src/mail/ngx_mail_proxy_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/mail/ngx_mail_smtp_handler.c b/src/mail/ngx_mail_smtp_handler.c index 0f69ce968..21714239f 100644 --- a/src/mail/ngx_mail_smtp_handler.c +++ b/src/mail/ngx_mail_smtp_handler.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/mail/ngx_mail_smtp_module.c b/src/mail/ngx_mail_smtp_module.c index 463bb6e0b..cdd4e5eb1 100644 --- a/src/mail/ngx_mail_smtp_module.c +++ b/src/mail/ngx_mail_smtp_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/mail/ngx_mail_smtp_module.h b/src/mail/ngx_mail_smtp_module.h index 21f2287be..04ffab60a 100644 --- a/src/mail/ngx_mail_smtp_module.h +++ b/src/mail/ngx_mail_smtp_module.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/mail/ngx_mail_ssl_module.c b/src/mail/ngx_mail_ssl_module.c index fa02409d2..dd6f2ac41 100644 --- a/src/mail/ngx_mail_ssl_module.c +++ b/src/mail/ngx_mail_ssl_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/mail/ngx_mail_ssl_module.h b/src/mail/ngx_mail_ssl_module.h index 61a275b36..7f59b38ae 100644 --- a/src/mail/ngx_mail_ssl_module.h +++ b/src/mail/ngx_mail_ssl_module.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/misc/ngx_google_perftools_module.c b/src/misc/ngx_google_perftools_module.c index 8be5b97ec..f2f8221b5 100644 --- a/src/misc/ngx_google_perftools_module.c +++ b/src/misc/ngx_google_perftools_module.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_aio_read.c b/src/os/unix/ngx_aio_read.c index 1e41bac5f..784988173 100644 --- a/src/os/unix/ngx_aio_read.c +++ b/src/os/unix/ngx_aio_read.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_aio_read_chain.c b/src/os/unix/ngx_aio_read_chain.c index 28b9c8fa9..8c831b951 100644 --- a/src/os/unix/ngx_aio_read_chain.c +++ b/src/os/unix/ngx_aio_read_chain.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_aio_write.c b/src/os/unix/ngx_aio_write.c index 9138af16a..f0d93918e 100644 --- a/src/os/unix/ngx_aio_write.c +++ b/src/os/unix/ngx_aio_write.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_aio_write_chain.c b/src/os/unix/ngx_aio_write_chain.c index 716789690..b0c25085d 100644 --- a/src/os/unix/ngx_aio_write_chain.c +++ b/src/os/unix/ngx_aio_write_chain.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_alloc.c b/src/os/unix/ngx_alloc.c index c71a10254..5c2f78702 100644 --- a/src/os/unix/ngx_alloc.c +++ b/src/os/unix/ngx_alloc.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_alloc.h b/src/os/unix/ngx_alloc.h index c7a31aa54..655db257f 100644 --- a/src/os/unix/ngx_alloc.h +++ b/src/os/unix/ngx_alloc.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_atomic.h b/src/os/unix/ngx_atomic.h index 57826ffcf..104ac376a 100644 --- a/src/os/unix/ngx_atomic.h +++ b/src/os/unix/ngx_atomic.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_channel.c b/src/os/unix/ngx_channel.c index a0bdc2b8e..29c69da40 100644 --- a/src/os/unix/ngx_channel.c +++ b/src/os/unix/ngx_channel.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_channel.h b/src/os/unix/ngx_channel.h index 365d4394b..d7a9f6b54 100644 --- a/src/os/unix/ngx_channel.h +++ b/src/os/unix/ngx_channel.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_daemon.c b/src/os/unix/ngx_daemon.c index 7255b7a7e..f18860bbe 100644 --- a/src/os/unix/ngx_daemon.c +++ b/src/os/unix/ngx_daemon.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_darwin.h b/src/os/unix/ngx_darwin.h index ebd8d355d..4d01b26ea 100644 --- a/src/os/unix/ngx_darwin.h +++ b/src/os/unix/ngx_darwin.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_darwin_config.h b/src/os/unix/ngx_darwin_config.h index 1717c690f..149778c29 100644 --- a/src/os/unix/ngx_darwin_config.h +++ b/src/os/unix/ngx_darwin_config.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_darwin_init.c b/src/os/unix/ngx_darwin_init.c index 6ca1ca750..e3cc5fe3e 100644 --- a/src/os/unix/ngx_darwin_init.c +++ b/src/os/unix/ngx_darwin_init.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_darwin_sendfile_chain.c b/src/os/unix/ngx_darwin_sendfile_chain.c index 59d46534b..c86976549 100644 --- a/src/os/unix/ngx_darwin_sendfile_chain.c +++ b/src/os/unix/ngx_darwin_sendfile_chain.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_errno.c b/src/os/unix/ngx_errno.c index faae47829..75176c49a 100644 --- a/src/os/unix/ngx_errno.c +++ b/src/os/unix/ngx_errno.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_errno.h b/src/os/unix/ngx_errno.h index 3d51f3cfc..092d05a0b 100644 --- a/src/os/unix/ngx_errno.h +++ b/src/os/unix/ngx_errno.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_file_aio_read.c b/src/os/unix/ngx_file_aio_read.c index 49662365f..0bb383de5 100644 --- a/src/os/unix/ngx_file_aio_read.c +++ b/src/os/unix/ngx_file_aio_read.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ @@ -156,24 +157,15 @@ ngx_file_aio_result(ngx_file_t *file, ngx_event_aio_t *aio, ngx_event_t *ev) 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 +173,9 @@ ngx_file_aio_result(ngx_file_t *file, ngx_event_aio_t *aio, ngx_event_t *ev) 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; } diff --git a/src/os/unix/ngx_files.c b/src/os/unix/ngx_files.c index 196323727..ca5458104 100644 --- a/src/os/unix/ngx_files.c +++ b/src/os/unix/ngx_files.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_files.h b/src/os/unix/ngx_files.h index 7c7f1fcd3..abeb1570b 100644 --- a/src/os/unix/ngx_files.h +++ b/src/os/unix/ngx_files.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_freebsd.h b/src/os/unix/ngx_freebsd.h index a96f4eb1a..4f93da55c 100644 --- a/src/os/unix/ngx_freebsd.h +++ b/src/os/unix/ngx_freebsd.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_freebsd_config.h b/src/os/unix/ngx_freebsd_config.h index 798f2eacd..460581a7b 100644 --- a/src/os/unix/ngx_freebsd_config.h +++ b/src/os/unix/ngx_freebsd_config.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_freebsd_init.c b/src/os/unix/ngx_freebsd_init.c index 8edce42f6..57af44a20 100644 --- a/src/os/unix/ngx_freebsd_init.c +++ b/src/os/unix/ngx_freebsd_init.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_freebsd_rfork_thread.c b/src/os/unix/ngx_freebsd_rfork_thread.c index 3c550fb8a..9506b9de3 100644 --- a/src/os/unix/ngx_freebsd_rfork_thread.c +++ b/src/os/unix/ngx_freebsd_rfork_thread.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_freebsd_rfork_thread.h b/src/os/unix/ngx_freebsd_rfork_thread.h index 9826822b2..2c238f79c 100644 --- a/src/os/unix/ngx_freebsd_rfork_thread.h +++ b/src/os/unix/ngx_freebsd_rfork_thread.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_freebsd_sendfile_chain.c b/src/os/unix/ngx_freebsd_sendfile_chain.c index 8c98f8e38..610697d77 100644 --- a/src/os/unix/ngx_freebsd_sendfile_chain.c +++ b/src/os/unix/ngx_freebsd_sendfile_chain.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_gcc_atomic_amd64.h b/src/os/unix/ngx_gcc_atomic_amd64.h index 1008a6017..159a29742 100644 --- a/src/os/unix/ngx_gcc_atomic_amd64.h +++ b/src/os/unix/ngx_gcc_atomic_amd64.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_gcc_atomic_ppc.h b/src/os/unix/ngx_gcc_atomic_ppc.h index e82e75574..45afc4b9e 100644 --- a/src/os/unix/ngx_gcc_atomic_ppc.h +++ b/src/os/unix/ngx_gcc_atomic_ppc.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_gcc_atomic_sparc64.h b/src/os/unix/ngx_gcc_atomic_sparc64.h index e5a6254ec..d26e1307c 100644 --- a/src/os/unix/ngx_gcc_atomic_sparc64.h +++ b/src/os/unix/ngx_gcc_atomic_sparc64.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_gcc_atomic_x86.h b/src/os/unix/ngx_gcc_atomic_x86.h index 1951d00e2..54e01aebf 100644 --- a/src/os/unix/ngx_gcc_atomic_x86.h +++ b/src/os/unix/ngx_gcc_atomic_x86.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_linux.h b/src/os/unix/ngx_linux.h index e871ba9b0..1b8bdac51 100644 --- a/src/os/unix/ngx_linux.h +++ b/src/os/unix/ngx_linux.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_linux_aio_read.c b/src/os/unix/ngx_linux_aio_read.c index d31c4a064..8273c13f9 100644 --- a/src/os/unix/ngx_linux_aio_read.c +++ b/src/os/unix/ngx_linux_aio_read.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_linux_config.h b/src/os/unix/ngx_linux_config.h index d72cf26b6..2834032de 100644 --- a/src/os/unix/ngx_linux_config.h +++ b/src/os/unix/ngx_linux_config.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_linux_init.c b/src/os/unix/ngx_linux_init.c index 277be9537..b910380d7 100644 --- a/src/os/unix/ngx_linux_init.c +++ b/src/os/unix/ngx_linux_init.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_linux_sendfile_chain.c b/src/os/unix/ngx_linux_sendfile_chain.c index a2225d9c6..4f6fdf587 100644 --- a/src/os/unix/ngx_linux_sendfile_chain.c +++ b/src/os/unix/ngx_linux_sendfile_chain.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_os.h b/src/os/unix/ngx_os.h index 8f9622ed3..c646e2aa5 100644 --- a/src/os/unix/ngx_os.h +++ b/src/os/unix/ngx_os.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_posix_config.h b/src/os/unix/ngx_posix_config.h index e327d5460..a0a2c8ce8 100644 --- a/src/os/unix/ngx_posix_config.h +++ b/src/os/unix/ngx_posix_config.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_posix_init.c b/src/os/unix/ngx_posix_init.c index 2357ab31f..02642bd7c 100644 --- a/src/os/unix/ngx_posix_init.c +++ b/src/os/unix/ngx_posix_init.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_process.c b/src/os/unix/ngx_process.c index 3eba6ce23..038b5707f 100644 --- a/src/os/unix/ngx_process.c +++ b/src/os/unix/ngx_process.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_process.h b/src/os/unix/ngx_process.h index aba0b5169..bd0252bd8 100644 --- a/src/os/unix/ngx_process.h +++ b/src/os/unix/ngx_process.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c index fbf18a5f2..080d40c1e 100644 --- a/src/os/unix/ngx_process_cycle.c +++ b/src/os/unix/ngx_process_cycle.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_process_cycle.h b/src/os/unix/ngx_process_cycle.h index e6cef6b3f..94747b85d 100644 --- a/src/os/unix/ngx_process_cycle.h +++ b/src/os/unix/ngx_process_cycle.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_pthread_thread.c b/src/os/unix/ngx_pthread_thread.c index 676c76098..1cf31c3bc 100644 --- a/src/os/unix/ngx_pthread_thread.c +++ b/src/os/unix/ngx_pthread_thread.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_readv_chain.c b/src/os/unix/ngx_readv_chain.c index b65a0d7b8..373c4027c 100644 --- a/src/os/unix/ngx_readv_chain.c +++ b/src/os/unix/ngx_readv_chain.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_recv.c b/src/os/unix/ngx_recv.c index 316e0516d..6a4a09966 100644 --- a/src/os/unix/ngx_recv.c +++ b/src/os/unix/ngx_recv.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_send.c b/src/os/unix/ngx_send.c index e0d690077..80995ab3a 100644 --- a/src/os/unix/ngx_send.c +++ b/src/os/unix/ngx_send.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_setproctitle.c b/src/os/unix/ngx_setproctitle.c index b814610b7..a61fe1b94 100644 --- a/src/os/unix/ngx_setproctitle.c +++ b/src/os/unix/ngx_setproctitle.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_setproctitle.h b/src/os/unix/ngx_setproctitle.h index 09973e990..2323408c4 100644 --- a/src/os/unix/ngx_setproctitle.h +++ b/src/os/unix/ngx_setproctitle.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_shmem.c b/src/os/unix/ngx_shmem.c index f7f831fdb..3ec7cbf1f 100644 --- a/src/os/unix/ngx_shmem.c +++ b/src/os/unix/ngx_shmem.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_shmem.h b/src/os/unix/ngx_shmem.h index b5f669701..566a7d330 100644 --- a/src/os/unix/ngx_shmem.h +++ b/src/os/unix/ngx_shmem.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_socket.c b/src/os/unix/ngx_socket.c index 27ae48dc5..3978f655c 100644 --- a/src/os/unix/ngx_socket.c +++ b/src/os/unix/ngx_socket.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_socket.h b/src/os/unix/ngx_socket.h index 9e6a859bb..fcc515335 100644 --- a/src/os/unix/ngx_socket.h +++ b/src/os/unix/ngx_socket.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_solaris.h b/src/os/unix/ngx_solaris.h index 44ce79679..7b167d830 100644 --- a/src/os/unix/ngx_solaris.h +++ b/src/os/unix/ngx_solaris.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_solaris_config.h b/src/os/unix/ngx_solaris_config.h index fe66026e5..8a86fe610 100644 --- a/src/os/unix/ngx_solaris_config.h +++ b/src/os/unix/ngx_solaris_config.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_solaris_init.c b/src/os/unix/ngx_solaris_init.c index 57a859e68..f2f3600da 100644 --- a/src/os/unix/ngx_solaris_init.c +++ b/src/os/unix/ngx_solaris_init.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_solaris_sendfilev_chain.c b/src/os/unix/ngx_solaris_sendfilev_chain.c index 3a9356cdb..d68220dc3 100644 --- a/src/os/unix/ngx_solaris_sendfilev_chain.c +++ b/src/os/unix/ngx_solaris_sendfilev_chain.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_sunpro_amd64.il b/src/os/unix/ngx_sunpro_amd64.il index c6519574d..dc454b20b 100644 --- a/src/os/unix/ngx_sunpro_amd64.il +++ b/src/os/unix/ngx_sunpro_amd64.il @@ -1,5 +1,6 @@ / / Copyright (C) Igor Sysoev +/ Copyright (C) Nginx, Inc. / / ngx_atomic_uint_t ngx_atomic_cmp_set(ngx_atomic_t *lock, diff --git a/src/os/unix/ngx_sunpro_atomic_sparc64.h b/src/os/unix/ngx_sunpro_atomic_sparc64.h index b12603009..5f280553c 100644 --- a/src/os/unix/ngx_sunpro_atomic_sparc64.h +++ b/src/os/unix/ngx_sunpro_atomic_sparc64.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_sunpro_sparc64.il b/src/os/unix/ngx_sunpro_sparc64.il index 2dd83204a..bdeef6125 100644 --- a/src/os/unix/ngx_sunpro_sparc64.il +++ b/src/os/unix/ngx_sunpro_sparc64.il @@ -1,5 +1,6 @@ / / Copyright (C) Igor Sysoev +/ Copyright (C) Nginx, Inc. / diff --git a/src/os/unix/ngx_sunpro_x86.il b/src/os/unix/ngx_sunpro_x86.il index e32ea8cc1..fd1cc0049 100644 --- a/src/os/unix/ngx_sunpro_x86.il +++ b/src/os/unix/ngx_sunpro_x86.il @@ -1,5 +1,6 @@ / / Copyright (C) Igor Sysoev +/ Copyright (C) Nginx, Inc. / / ngx_atomic_uint_t ngx_atomic_cmp_set(ngx_atomic_t *lock, diff --git a/src/os/unix/ngx_thread.h b/src/os/unix/ngx_thread.h index eec297a8c..49c5d5656 100644 --- a/src/os/unix/ngx_thread.h +++ b/src/os/unix/ngx_thread.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_time.c b/src/os/unix/ngx_time.c index 4ca8be672..cc760b2eb 100644 --- a/src/os/unix/ngx_time.c +++ b/src/os/unix/ngx_time.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_time.h b/src/os/unix/ngx_time.h index 5d9406cde..c128c9aa0 100644 --- a/src/os/unix/ngx_time.h +++ b/src/os/unix/ngx_time.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_udp_recv.c b/src/os/unix/ngx_udp_recv.c index fdcd7fa79..1c807a08b 100644 --- a/src/os/unix/ngx_udp_recv.c +++ b/src/os/unix/ngx_udp_recv.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_user.c b/src/os/unix/ngx_user.c index c46fb2bfd..cb452e62b 100644 --- a/src/os/unix/ngx_user.c +++ b/src/os/unix/ngx_user.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_user.h b/src/os/unix/ngx_user.h index 68d1c6e5f..6e82204f4 100644 --- a/src/os/unix/ngx_user.h +++ b/src/os/unix/ngx_user.h @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/ngx_writev_chain.c b/src/os/unix/ngx_writev_chain.c index 695cb4978..579fdecc8 100644 --- a/src/os/unix/ngx_writev_chain.c +++ b/src/os/unix/ngx_writev_chain.c @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */ diff --git a/src/os/unix/rfork_thread.S b/src/os/unix/rfork_thread.S index 161007d6b..e570349f9 100644 --- a/src/os/unix/rfork_thread.S +++ b/src/os/unix/rfork_thread.S @@ -1,6 +1,7 @@ /* * Copyright (C) Igor Sysoev + * Copyright (C) Nginx, Inc. */