summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2007-07-30 09:15:47 +0000
committerJonathan Kolb <jon@b0g.us>2007-07-30 09:15:47 +0000
commitad5526a0773dea7fca82cca22433e2cb0b327837 (patch)
tree83f8ffae019ea0d39633c2c5520b3dfa6cfd47d2
parentb9b71bc11c42dce8b014ee3cf3a1f5dc7b9ecc2f (diff)
downloadnginx-ad5526a0773dea7fca82cca22433e2cb0b327837.tar.gz
Changes with nginx 0.6.6 30 Jul 2007v0.6.6
*) Feature: the --sysconfdir=PATH option in configure. *) Feature: named locations. *) Feature: the $args variable can be set with the "set" directive. *) Feature: the $is_args variable. *) Bugfix: fair big weight upstream balancer. *) Bugfix: if a client has closed connection to mail proxy then nginx might not close connection to backend. *) Bugfix: if the same host without specified port was used as backend for HTTP and HTTPS, then nginx used only one port - 80 or 443. *) Bugfix: fix building on Solaris/amd64 by Sun Studio 11 and early versions; bug appeared in 0.6.4.
-rw-r--r--CHANGES22
-rw-r--r--CHANGES.ru24
-rw-r--r--auto/cc/sunc2
-rw-r--r--auto/install23
-rw-r--r--auto/options8
-rw-r--r--auto/summary1
-rw-r--r--auto/types/uintptr_t3
-rwxr-xr-xconfigure1
-rw-r--r--src/core/nginx.c6
-rw-r--r--src/core/nginx.h2
-rw-r--r--src/core/ngx_conf_file.c21
-rw-r--r--src/core/ngx_conf_file.h3
-rw-r--r--src/core/ngx_config.h31
-rw-r--r--src/core/ngx_file.c2
-rw-r--r--src/core/ngx_file.h2
-rw-r--r--src/core/ngx_log.c2
-rw-r--r--src/event/modules/ngx_aio_module.c14
-rw-r--r--src/event/modules/ngx_devpoll_module.c35
-rw-r--r--src/event/modules/ngx_epoll_module.c29
-rw-r--r--src/event/modules/ngx_eventport_module.c30
-rw-r--r--src/event/modules/ngx_kqueue_module.c57
-rw-r--r--src/event/modules/ngx_kqueue_module.h1
-rw-r--r--src/event/modules/ngx_poll_module.c38
-rw-r--r--src/event/modules/ngx_rtsig_module.c42
-rw-r--r--src/event/modules/ngx_select_module.c24
-rw-r--r--src/event/ngx_event.c2
-rw-r--r--src/event/ngx_event.h16
-rw-r--r--src/event/ngx_event_busy_lock.c2
-rw-r--r--src/event/ngx_event_openssl.c8
-rw-r--r--src/http/modules/ngx_http_auth_basic_module.c2
-rw-r--r--src/http/modules/ngx_http_geo_module.c2
-rw-r--r--src/http/modules/ngx_http_map_module.c2
-rw-r--r--src/http/modules/ngx_http_proxy_module.c11
-rw-r--r--src/http/modules/perl/nginx.pm2
-rw-r--r--src/http/modules/perl/ngx_http_perl_module.c2
-rw-r--r--src/http/ngx_http.c9
-rw-r--r--src/http/ngx_http_core_module.c116
-rw-r--r--src/http/ngx_http_core_module.h11
-rw-r--r--src/http/ngx_http_special_response.c4
-rw-r--r--src/http/ngx_http_upstream.c6
-rw-r--r--src/http/ngx_http_upstream_round_robin.c108
-rw-r--r--src/http/ngx_http_upstream_round_robin.h8
-rw-r--r--src/http/ngx_http_variables.c51
-rw-r--r--src/mail/ngx_mail_proxy_module.c8
-rw-r--r--src/os/unix/ngx_aio_write_chain.c2
-rw-r--r--src/os/unix/ngx_freebsd_config.h2
-rw-r--r--src/os/unix/ngx_freebsd_sendfile_chain.c2
-rw-r--r--src/os/unix/ngx_linux_sendfile_chain.c2
-rw-r--r--src/os/unix/ngx_solaris_sendfilev_chain.c2
-rw-r--r--src/os/unix/ngx_writev_chain.c2
50 files changed, 544 insertions, 261 deletions
diff --git a/CHANGES b/CHANGES
index 9abd69e33..8b8c1523c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,26 @@
+Changes with nginx 0.6.6 30 Jul 2007
+
+ *) Feature: the --sysconfdir=PATH option in configure.
+
+ *) Feature: named locations.
+
+ *) Feature: the $args variable can be set with the "set" directive.
+
+ *) Feature: the $is_args variable.
+
+ *) Bugfix: fair big weight upstream balancer.
+
+ *) Bugfix: if a client has closed connection to mail proxy then nginx
+ might not close connection to backend.
+
+ *) Bugfix: if the same host without specified port was used as backend
+ for HTTP and HTTPS, then nginx used only one port - 80 or 443.
+
+ *) Bugfix: fix building on Solaris/amd64 by Sun Studio 11 and early
+ versions; bug appeared in 0.6.4.
+
+
Changes with nginx 0.6.5 23 Jul 2007
*) Feature: $nginx_version variable.
diff --git a/CHANGES.ru b/CHANGES.ru
index 3a9b54084..94e8b21c4 100644
--- a/CHANGES.ru
+++ b/CHANGES.ru
@@ -1,4 +1,28 @@
+Изменения в nginx 0.6.6 30.07.2007
+
+ *) Добавление: параметр --sysconfdir=PATH в configure.
+
+ *) Добавление: именованные location'ы.
+
+ *) Добавление: переменную $args можно устанавливать с помощью set.
+
+ *) Добавление: переменная $is_args.
+
+ *) Исправление: равномерное распределение запросов к апстримам с
+ большими весами.
+
+ *) Исправление: если клиент в почтовом прокси-сервере закрывал
+ соединение, то nginx мог не закрывать соединение с бэкендом.
+
+ *) Исправление: при использовании одного хоста в качестве бэкендов для
+ протоколов HTTP и HTTPS без явного указания портов, nginx
+ использовал только один порт - 80 или 443.
+
+ *) Исправление: nginx не собирался на Solaris/amd64 Sun Studio 11 и
+ более ранними версиями; ошибка появилась в 0.6.4.
+
+
Изменения в nginx 0.6.5 23.07.2007
*) Добавление: переменная $nginx_version.
diff --git a/auto/cc/sunc b/auto/cc/sunc
index f7eb8800d..d464c6e11 100644
--- a/auto/cc/sunc
+++ b/auto/cc/sunc
@@ -39,7 +39,7 @@ if [ "$ngx_sunc_ver" -ge 1424 ]; then
else
ngx_sparc32="-xarch=v8plus"
ngx_sparc64="-xarch=v9"
- ngx_amd64="-amd64"
+ ngx_amd64="-xarch=amd64"
fi
case "$NGX_MACHINE" in
diff --git a/auto/install b/auto/install
index 3496c5b12..e949aeccc 100644
--- a/auto/install
+++ b/auto/install
@@ -26,19 +26,22 @@ install: $NGX_OBJS${ngx_dirsep}nginx${ngx_binext} \
test ! -f '$NGX_SBIN_PATH' || mv '$NGX_SBIN_PATH' '$NGX_SBIN_PATH.old'
cp $NGX_OBJS/nginx '$NGX_SBIN_PATH'
- test -d '`dirname "$NGX_CONF_PATH"`' \
- || mkdir -p '`dirname "$NGX_CONF_PATH"`'
+ test -d '$NGX_CONF_PREFIX' || mkdir -p '$NGX_CONF_PREFIX'
- cp conf/koi-win '`dirname "$NGX_CONF_PATH"`'
- cp conf/koi-utf '`dirname "$NGX_CONF_PATH"`'
- cp conf/win-utf '`dirname "$NGX_CONF_PATH"`'
+ cp conf/koi-win '$NGX_CONF_PREFIX'
+ cp conf/koi-utf '$NGX_CONF_PREFIX'
+ cp conf/win-utf '$NGX_CONF_PREFIX'
- test -f '`dirname "$NGX_CONF_PATH"`/mime.types' || \
- cp conf/mime.types '`dirname "$NGX_CONF_PATH"`/mime.types'
- cp conf/mime.types '`dirname "$NGX_CONF_PATH"`/mime.types.default'
+ test -f '$NGX_CONF_PREFIX/mime.types' \
+ || cp conf/mime.types '$NGX_CONF_PREFIX'
+ cp conf/mime.types '$NGX_CONF_PATH/mime.types.default'
- test -f '$NGX_CONF_PATH' || cp conf/nginx.conf '$NGX_CONF_PATH'
- cp conf/nginx.conf '`dirname "$NGX_CONF_PATH"`/nginx.conf.default'
+ test -f '$NGX_CONF_PREFIX/fastcgi_params' \
+ || cp conf/fastcgi_params '$NGX_CONF_PREFIX'
+ cp conf/fastcgi_params '$NGX_CONF_PATH/fastcgi_params.default'
+
+ test -f '$NGX_CONF_PATH' || cp conf/nginx.conf '$NGX_CONF_PREFIX'
+ cp conf/nginx.conf '$NGX_CONF_PREFIX/nginx.conf.default'
test -d '`dirname "$NGX_PID_PATH"`' \
|| mkdir -p '`dirname "$NGX_PID_PATH"`'
diff --git a/auto/options b/auto/options
index 7fb7131a0..0640f8c84 100644
--- a/auto/options
+++ b/auto/options
@@ -6,6 +6,7 @@ help=no
NGX_PREFIX=
NGX_SBIN_PATH=
+NGX_CONF_PREFIX=
NGX_CONF_PATH=
NGX_ERROR_LOG_PATH=
NGX_PID_PATH=
@@ -123,6 +124,7 @@ do
--prefix=*) NGX_PREFIX="$value" ;;
--sbin-path=*) NGX_SBIN_PATH="$value" ;;
+ --sysconfdir=*) NGX_CONF_PREFIX="$value" ;;
--conf-path=*) NGX_CONF_PATH="$value" ;;
--error-log-path=*) NGX_ERROR_LOG_PATH="$value";;
--pid-path=*) NGX_PID_PATH="$value" ;;
@@ -240,6 +242,7 @@ cat << END
--prefix=PATH set the installation prefix
--sbin-path=PATH set path to the nginx binary file
+ --sysconfdir=PATH set the configuration prefix
--conf-path=PATH set path to the nginx.conf file
--error-log-path=PATH set path to the error log
--pid-path=PATH set path to nginx.pid file
@@ -360,6 +363,7 @@ fi
NGX_PREFIX=${NGX_PREFIX:-/usr/local/nginx}
+NGX_CONF_PREFIX=${NGX_CONF_PREFIX:-$NGX_PREFIX}
case ".$NGX_SBIN_PATH" in
@@ -381,11 +385,11 @@ case ".$NGX_CONF_PATH" in
;;
.)
- NGX_CONF_PATH=$NGX_PREFIX/conf/nginx.conf
+ NGX_CONF_PATH=$NGX_CONF_PREFIX/conf/nginx.conf
;;
*)
- NGX_CONF_PATH=$NGX_PREFIX/$NGX_CONF_PATH
+ NGX_CONF_PATH=$NGX_CONF_PREFIX/$NGX_CONF_PATH
;;
esac
diff --git a/auto/summary b/auto/summary
index accb7b9ac..c220c7123 100644
--- a/auto/summary
+++ b/auto/summary
@@ -148,6 +148,7 @@ fi
cat << END
nginx path prefix: "$NGX_PREFIX"
nginx binary file: "$NGX_SBIN_PATH"
+ nginx configuration prefix: "$NGX_CONF_PREFIX"
nginx configuration file: "$NGX_CONF_PATH"
nginx pid file: "$NGX_PID_PATH"
END
diff --git a/auto/types/uintptr_t b/auto/types/uintptr_t
index e7d8d5ca0..55024b820 100644
--- a/auto/types/uintptr_t
+++ b/auto/types/uintptr_t
@@ -36,5 +36,6 @@ if [ $found = no ]; then
found="uint`expr 8 \* $ngx_ptr_size`_t"
echo ", $found used"
- echo "typedef $found uintptr_t;" >> $NGX_AUTO_CONFIG_H
+ echo "typedef $found uintptr_t;" >> $NGX_AUTO_CONFIG_H
+ echo "typedef $found intptr_t;" | sed -e 's/u//g' >> $NGX_AUTO_CONFIG_H
fi
diff --git a/configure b/configure
index bcb8aaa3a..00a7f4872 100755
--- a/configure
+++ b/configure
@@ -67,6 +67,7 @@ fi
have=NGX_PREFIX value="\"$NGX_PREFIX/\"" . auto/define
have=NGX_SBIN_PATH value="\"$NGX_SBIN_PATH\"" . auto/define
+have=NGX_CONF_PREFIX value="\"$NGX_CONF_PREFIX/\"" . auto/define
have=NGX_CONF_PATH value="\"$NGX_CONF_PATH\"" . auto/define
have=NGX_PID_PATH value="\"$NGX_PID_PATH\"" . auto/define
have=NGX_LOCK_PATH value="\"$NGX_LOCK_PATH\"" . auto/define
diff --git a/src/core/nginx.c b/src/core/nginx.c
index b758775e3..27cb80f85 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -656,7 +656,7 @@ ngx_getopt(ngx_cycle_t *cycle, int argc, char *const *argv)
cycle->conf_file.data = (u_char *) NGX_CONF_PATH;
}
- if (ngx_conf_full_name(cycle, &cycle->conf_file) == NGX_ERROR) {
+ if (ngx_conf_full_name(cycle, &cycle->conf_file, 1) == NGX_ERROR) {
return NGX_ERROR;
}
@@ -826,7 +826,7 @@ ngx_core_module_init_conf(ngx_cycle_t *cycle, void *conf)
ccf->pid.data = (u_char *) NGX_PID_PATH;
}
- if (ngx_conf_full_name(cycle, &ccf->pid) == NGX_ERROR) {
+ if (ngx_conf_full_name(cycle, &ccf->pid, 0) == NGX_ERROR) {
return NGX_CONF_ERROR;
}
@@ -846,7 +846,7 @@ ngx_core_module_init_conf(ngx_cycle_t *cycle, void *conf)
ccf->lock_file.data = (u_char *) NGX_LOCK_PATH;
}
- if (ngx_conf_full_name(cycle, &ccf->lock_file) == NGX_ERROR) {
+ if (ngx_conf_full_name(cycle, &ccf->lock_file, 0) == NGX_ERROR) {
return NGX_CONF_ERROR;
}
diff --git a/src/core/nginx.h b/src/core/nginx.h
index 85ae5e212..dc09261ee 100644
--- a/src/core/nginx.h
+++ b/src/core/nginx.h
@@ -8,7 +8,7 @@
#define _NGINX_H_INCLUDED_
-#define NGINX_VERSION "0.6.5"
+#define NGINX_VERSION "0.6.6"
#define NGINX_VER "nginx/" NGINX_VERSION
#define NGINX_VAR "NGINX"
diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c
index a68192fe0..514d55bad 100644
--- a/src/core/ngx_conf_file.c
+++ b/src/core/ngx_conf_file.c
@@ -641,7 +641,7 @@ ngx_conf_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
ngx_log_debug1(NGX_LOG_DEBUG_CORE, cf->log, 0, "include %s", file.data);
- if (ngx_conf_full_name(cf->cycle, &file) == NGX_ERROR) {
+ if (ngx_conf_full_name(cf->cycle, &file, 1) == NGX_ERROR) {
return NGX_CONF_ERROR;
}
@@ -681,9 +681,10 @@ ngx_conf_include(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
ngx_int_t
-ngx_conf_full_name(ngx_cycle_t *cycle, ngx_str_t *name)
+ngx_conf_full_name(ngx_cycle_t *cycle, ngx_str_t *name, ngx_uint_t conf_prefix)
{
- u_char *p;
+ size_t len;
+ u_char *p, *prefix;
ngx_str_t old;
if (name->data[0] == '/') {
@@ -704,14 +705,22 @@ ngx_conf_full_name(ngx_cycle_t *cycle, ngx_str_t *name)
old = *name;
- name->len = cycle->root.len + old.len;
+ if (conf_prefix) {
+ len = sizeof(NGX_CONF_PREFIX) - 1;
+ prefix = (u_char *) NGX_CONF_PREFIX;
+ } else {
+ len = cycle->root.len;
+ prefix = cycle->root.data;
+ }
+
+ name->len = len + old.len;
name->data = ngx_palloc(cycle->pool, name->len + 1);
if (name->data == NULL) {
return NGX_ERROR;
}
- p = ngx_cpymem(name->data, cycle->root.data, cycle->root.len),
+ p = ngx_cpymem(name->data, prefix, len);
ngx_cpystrn(p, old.data, old.len + 1);
return NGX_OK;
@@ -734,7 +743,7 @@ ngx_conf_open_file(ngx_cycle_t *cycle, ngx_str_t *name)
if (name) {
full = *name;
- if (ngx_conf_full_name(cycle, &full) == NGX_ERROR) {
+ if (ngx_conf_full_name(cycle, &full, 0) == NGX_ERROR) {
return NULL;
}
diff --git a/src/core/ngx_conf_file.h b/src/core/ngx_conf_file.h
index 7d5112919..2e91d0b8c 100644
--- a/src/core/ngx_conf_file.h
+++ b/src/core/ngx_conf_file.h
@@ -320,7 +320,8 @@ char *ngx_conf_check_num_bounds(ngx_conf_t *cf, void *post, void *data);
char *ngx_conf_parse(ngx_conf_t *cf, ngx_str_t *filename);
-ngx_int_t ngx_conf_full_name(ngx_cycle_t *cycle, ngx_str_t *name);
+ngx_int_t ngx_conf_full_name(ngx_cycle_t *cycle, ngx_str_t *name,
+ ngx_uint_t conf_prefix);
ngx_open_file_t *ngx_conf_open_file(ngx_cycle_t *cycle, ngx_str_t *name);
void ngx_cdecl ngx_conf_log_error(ngx_uint_t level, ngx_conf_t *cf,
ngx_err_t err, char *fmt, ...);
diff --git a/src/core/ngx_config.h b/src/core/ngx_config.h
index ef31be538..a6a9f5d27 100644
--- a/src/core/ngx_config.h
+++ b/src/core/ngx_config.h
@@ -70,31 +70,20 @@
#endif
+typedef intptr_t ngx_int_t;
+typedef uintptr_t ngx_uint_t;
+typedef intptr_t ngx_flag_t;
-/* TODO: platform specific: array[NGX_INVALID_ARRAY_INDEX] must cause SIGSEGV */
-#define NGX_INVALID_ARRAY_INDEX 0x80000000
-
-
-#if 1
-/* STUB: autoconf */
-typedef int ngx_int_t;
-typedef u_int ngx_uint_t;
-typedef int ngx_flag_t;
-#define NGX_INT_T_LEN sizeof("-2147483648") - 1
+#define NGX_INT32_LEN sizeof("-2147483648") - 1
+#define NGX_INT64_LEN sizeof("-9223372036854775808") - 1
+#if (NGX_PTR_SIZE == 4)
+#define NGX_INT_T_LEN NGX_INT32_LEN
#else
-
-typedef long ngx_int_t;
-typedef u_long ngx_uint_t;
-typedef long ngx_flag_t;
-#define NGX_INT_T_LEN sizeof("-9223372036854775808") - 1
-
+#define NGX_INT_T_LEN NGX_INT64_LEN
#endif
-#define NGX_INT32_LEN sizeof("-2147483648") - 1
-#define NGX_INT64_LEN sizeof("-9223372036854775808") - 1
-
#ifndef NGX_ALIGNMENT
#define NGX_ALIGNMENT sizeof(unsigned long) /* platform word */
@@ -108,6 +97,10 @@ typedef long ngx_flag_t;
#define ngx_abort abort
+/* TODO: platform specific: array[NGX_INVALID_ARRAY_INDEX] must cause SIGSEGV */
+#define NGX_INVALID_ARRAY_INDEX 0x80000000
+
+
/* TODO: auto_conf: ngx_inline inline __inline __inline__ */
#ifndef ngx_inline
#define ngx_inline inline
diff --git a/src/core/ngx_file.c b/src/core/ngx_file.c
index fcb8ff080..f85578623 100644
--- a/src/core/ngx_file.c
+++ b/src/core/ngx_file.c
@@ -260,7 +260,7 @@ ngx_conf_set_path_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
path->name.len--;
}
- if (ngx_conf_full_name(cf->cycle, &path->name) == NGX_ERROR) {
+ if (ngx_conf_full_name(cf->cycle, &path->name, 0) == NGX_ERROR) {
return NULL;
}
diff --git a/src/core/ngx_file.h b/src/core/ngx_file.h
index 0f819a1b8..063b0fb83 100644
--- a/src/core/ngx_file.h
+++ b/src/core/ngx_file.h
@@ -109,7 +109,7 @@ char *ngx_conf_set_access_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
curr->name.len = sizeof(path) - 1; \
curr->name.data = (u_char *) path; \
\
- if (ngx_conf_full_name(cf->cycle, &curr->name) == NGX_ERROR) { \
+ if (ngx_conf_full_name(cf->cycle, &curr->name, 0) == NGX_ERROR) { \
return NGX_CONF_ERROR; \
} \
\
diff --git a/src/core/ngx_log.c b/src/core/ngx_log.c
index 349ae7681..1059acf43 100644
--- a/src/core/ngx_log.c
+++ b/src/core/ngx_log.c
@@ -333,7 +333,7 @@ ngx_set_error_log(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
} else {
cf->cycle->new_log->file->name = value[1];
- if (ngx_conf_full_name(cf->cycle, &cf->cycle->new_log->file->name)
+ if (ngx_conf_full_name(cf->cycle, &cf->cycle->new_log->file->name, 0)
== NGX_ERROR)
{
return NGX_CONF_ERROR;
diff --git a/src/event/modules/ngx_aio_module.c b/src/event/modules/ngx_aio_module.c
index 1022643e8..4a78c3991 100644
--- a/src/event/modules/ngx_aio_module.c
+++ b/src/event/modules/ngx_aio_module.c
@@ -16,9 +16,11 @@
static ngx_int_t ngx_aio_init(ngx_cycle_t *cycle, ngx_msec_t timer);
static void ngx_aio_done(ngx_cycle_t *cycle);
-static ngx_int_t ngx_aio_add_event(ngx_event_t *ev, int event, u_int flags);
-static ngx_int_t ngx_aio_del_event(ngx_event_t *ev, int event, u_int flags);
-static ngx_int_t ngx_aio_del_connection(ngx_connection_t *c, u_int flags);
+static ngx_int_t ngx_aio_add_event(ngx_event_t *ev, ngx_int_t event,
+ ngx_uint_t flags);
+static ngx_int_t ngx_aio_del_event(ngx_event_t *ev, ngx_int_t event,
+ ngx_uint_t flags);
+static ngx_int_t ngx_aio_del_connection(ngx_connection_t *c, ngx_uint_t flags);
static ngx_int_t ngx_aio_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
ngx_uint_t flags);
@@ -100,21 +102,21 @@ ngx_aio_done(ngx_cycle_t *cycle)
/* the event adding and deleting are needed for the listening sockets */
static ngx_int_t
-ngx_aio_add_event(ngx_event_t *ev, int event, u_int flags)
+ngx_aio_add_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
{
return ngx_kqueue_module_ctx.actions.add(ev, event, flags);
}
static ngx_int_t
-ngx_aio_del_event(ngx_event_t *ev, int event, u_int flags)
+ngx_aio_del_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
{
return ngx_kqueue_module_ctx.actions.del(ev, event, flags);
}
static ngx_int_t
-ngx_aio_del_connection(ngx_connection_t *c, u_int flags)
+ngx_aio_del_connection(ngx_connection_t *c, ngx_uint_t flags)
{
int rc;
diff --git a/src/event/modules/ngx_devpoll_module.c b/src/event/modules/ngx_devpoll_module.c
index d7ea99b0c..be523add9 100644
--- a/src/event/modules/ngx_devpoll_module.c
+++ b/src/event/modules/ngx_devpoll_module.c
@@ -13,8 +13,8 @@
/* Solaris declarations */
-#define POLLREMOVE 0x0800
-#define DP_POLL 0xD001
+#define POLLREMOVE 0x0800
+#define DP_POLL 0xD001
struct dvpoll {
struct pollfd *dp_fds;
@@ -26,16 +26,19 @@ struct dvpoll {
typedef struct {
- u_int changes;
- u_int events;
+ ngx_uint_t changes;
+ ngx_uint_t events;
} ngx_devpoll_conf_t;
static ngx_int_t ngx_devpoll_init(ngx_cycle_t *cycle, ngx_msec_t timer);
static void ngx_devpoll_done(ngx_cycle_t *cycle);
-static ngx_int_t ngx_devpoll_add_event(ngx_event_t *ev, int event, u_int flags);
-static ngx_int_t ngx_devpoll_del_event(ngx_event_t *ev, int event, u_int flags);
-static ngx_int_t ngx_devpoll_set_event(ngx_event_t *ev, int event, u_int flags);
+static ngx_int_t ngx_devpoll_add_event(ngx_event_t *ev, ngx_int_t event,
+ ngx_uint_t flags);
+static ngx_int_t ngx_devpoll_del_event(ngx_event_t *ev, ngx_int_t event,
+ ngx_uint_t flags);
+static ngx_int_t ngx_devpoll_set_event(ngx_event_t *ev, ngx_int_t event,
+ ngx_uint_t flags);
static ngx_int_t ngx_devpoll_process_events(ngx_cycle_t *cycle,
ngx_msec_t timer, ngx_uint_t flags);
@@ -44,7 +47,7 @@ static char *ngx_devpoll_init_conf(ngx_cycle_t *cycle, void *conf);
static int dp = -1;
static struct pollfd *change_list, *event_list;
-static u_int nchanges, max_changes, nevents;
+static ngx_uint_t nchanges, max_changes, nevents;
static ngx_event_t **change_index;
@@ -208,7 +211,7 @@ ngx_devpoll_done(ngx_cycle_t *cycle)
static ngx_int_t
-ngx_devpoll_add_event(ngx_event_t *ev, int event, u_int flags)
+ngx_devpoll_add_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
{
#if (NGX_DEBUG)
ngx_connection_t *c;
@@ -221,7 +224,7 @@ ngx_devpoll_add_event(ngx_event_t *ev, int event, u_int flags)
#if (NGX_DEBUG)
c = ev->data;
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
- "devpoll add event: fd:%d ev:%04Xd", c->fd, event);
+ "devpoll add event: fd:%d ev:%04Xi", c->fd, event);
#endif
ev->active = 1;
@@ -231,7 +234,7 @@ ngx_devpoll_add_event(ngx_event_t *ev, int event, u_int flags)
static ngx_int_t
-ngx_devpoll_del_event(ngx_event_t *ev, int event, u_int flags)
+ngx_devpoll_del_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
{
ngx_event_t *e;
ngx_connection_t *c;
@@ -243,7 +246,7 @@ ngx_devpoll_del_event(ngx_event_t *ev, int event, u_int flags)
#endif
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
- "devpoll del event: fd:%d ev:%04Xd", c->fd, event);
+ "devpoll del event: fd:%d ev:%04Xi", c->fd, event);
if (ngx_devpoll_set_event(ev, POLLREMOVE, flags) == NGX_ERROR) {
return NGX_ERROR;
@@ -275,7 +278,7 @@ ngx_devpoll_del_event(ngx_event_t *ev, int event, u_int flags)
static ngx_int_t
-ngx_devpoll_set_event(ngx_event_t *ev, int event, u_int flags)
+ngx_devpoll_set_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
{
size_t n;
ngx_connection_t *c;
@@ -283,7 +286,7 @@ ngx_devpoll_set_event(ngx_event_t *ev, int event, u_int flags)
c = ev->data;
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0,
- "devpoll fd:%d ev:%04Xd fl:%04Xd", c->fd, event, flags);
+ "devpoll fd:%d ev:%04Xi fl:%04Xi", c->fd, event, flags);
if (nchanges >= max_changes) {
ngx_log_error(NGX_LOG_WARN, ev->log, 0,
@@ -300,7 +303,7 @@ ngx_devpoll_set_event(ngx_event_t *ev, int event, u_int flags)
}
change_list[nchanges].fd = c->fd;
- change_list[nchanges].events = event;
+ change_list[nchanges].events = (short) event;
change_list[nchanges].revents = 0;
change_index[nchanges] = ev;
@@ -353,7 +356,7 @@ ngx_devpoll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
}
dvp.dp_fds = event_list;
- dvp.dp_nfds = nevents;
+ dvp.dp_nfds = (int) nevents;
dvp.dp_timeout = timer;
events = ioctl(dp, DP_POLL, &dvp);
diff --git a/src/event/modules/ngx_epoll_module.c b/src/event/modules/ngx_epoll_module.c
index 184346abf..432164bc4 100644
--- a/src/event/modules/ngx_epoll_module.c
+++ b/src/event/modules/ngx_epoll_module.c
@@ -66,16 +66,19 @@ int epoll_wait(int epfd, struct epoll_event *events, int nevents, int timeout)
typedef struct {
- u_int events;
+ ngx_uint_t events;
} ngx_epoll_conf_t;
static ngx_int_t ngx_epoll_init(ngx_cycle_t *cycle, ngx_msec_t timer);
static void ngx_epoll_done(ngx_cycle_t *cycle);
-static ngx_int_t ngx_epoll_add_event(ngx_event_t *ev, int event, u_int flags);
-static ngx_int_t ngx_epoll_del_event(ngx_event_t *ev, int event, u_int flags);
+static ngx_int_t ngx_epoll_add_event(ngx_event_t *ev, ngx_int_t event,
+ ngx_uint_t flags);
+static ngx_int_t ngx_epoll_del_event(ngx_event_t *ev, ngx_int_t event,
+ ngx_uint_t flags);
static ngx_int_t ngx_epoll_add_connection(ngx_connection_t *c);
-static ngx_int_t ngx_epoll_del_connection(ngx_connection_t *c, u_int flags);
+static ngx_int_t ngx_epoll_del_connection(ngx_connection_t *c,
+ ngx_uint_t flags);
static ngx_int_t ngx_epoll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
ngx_uint_t flags);
@@ -84,7 +87,7 @@ static char *ngx_epoll_init_conf(ngx_cycle_t *cycle, void *conf);
static int ep = -1;
static struct epoll_event *event_list;
-static u_int nevents;
+static ngx_uint_t nevents;
static ngx_str_t epoll_name = ngx_string("epoll");
@@ -205,7 +208,7 @@ ngx_epoll_done(ngx_cycle_t *cycle)
static ngx_int_t
-ngx_epoll_add_event(ngx_event_t *ev, int event, u_int flags)
+ngx_epoll_add_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
{
int op;
uint32_t events, prev;
@@ -240,7 +243,7 @@ ngx_epoll_add_event(ngx_event_t *ev, int event, u_int flags)
op = EPOLL_CTL_ADD;
}
- ee.events = events | flags;
+ ee.events = events | (uint32_t) flags;
ee.data.ptr = (void *) ((uintptr_t) c | ev->instance);
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0,
@@ -263,7 +266,7 @@ ngx_epoll_add_event(ngx_event_t *ev, int event, u_int flags)
static ngx_int_t
-ngx_epoll_del_event(ngx_event_t *ev, int event, u_int flags)
+ngx_epoll_del_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
{
int op;
uint32_t prev;
@@ -295,7 +298,7 @@ ngx_epoll_del_event(ngx_event_t *ev, int event, u_int flags)
if (e->active) {
op = EPOLL_CTL_MOD;
- ee.events = prev | flags;
+ ee.events = prev | (uint32_t) flags;
ee.data.ptr = (void *) ((uintptr_t) c | ev->instance);
} else {
@@ -345,10 +348,10 @@ ngx_epoll_add_connection(ngx_connection_t *c)
static ngx_int_t
-ngx_epoll_del_connection(ngx_connection_t *c, u_int flags)
+ngx_epoll_del_connection(ngx_connection_t *c, ngx_uint_t flags)
{
- int op;
- struct epoll_event ee;
+ int op;
+ struct epoll_event ee;
/*
* when the file descriptor is closed the epoll automatically deletes
@@ -399,7 +402,7 @@ ngx_epoll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"epoll timer: %M", timer);
- events = epoll_wait(ep, event_list, nevents, timer);
+ events = epoll_wait(ep, event_list, (int) nevents, timer);
if (events == -1) {
err = ngx_errno;
diff --git a/src/event/modules/ngx_eventport_module.c b/src/event/modules/ngx_eventport_module.c
index 0abb2eec1..85cd1958d 100644
--- a/src/event/modules/ngx_eventport_module.c
+++ b/src/event/modules/ngx_eventport_module.c
@@ -40,9 +40,9 @@ typedef struct port_notify {
void *portnfy_user; /* user defined */
} port_notify_t;
-typedef struct itimerspec { /* definition per POSIX.4 */
- struct timespec it_interval; /* timer period */
- struct timespec it_value; /* timer expiration */
+typedef struct itimerspec { /* definition per POSIX.4 */
+ struct timespec it_interval;/* timer period */
+ struct timespec it_value; /* timer expiration */
} itimerspec_t;
int port_create(void)
@@ -87,16 +87,16 @@ int timer_delete(timer_t timerid)
typedef struct {
- u_int events;
+ ngx_uint_t events;
} ngx_eventport_conf_t;
static ngx_int_t ngx_eventport_init(ngx_cycle_t *cycle, ngx_msec_t timer);
static void ngx_eventport_done(ngx_cycle_t *cycle);
-static ngx_int_t ngx_eventport_add_event(ngx_event_t *ev, int event,
- u_int flags);
-static ngx_int_t ngx_eventport_del_event(ngx_event_t *ev, int event,
- u_int flags);
+static ngx_int_t ngx_eventport_add_event(ngx_event_t *ev, ngx_int_t event,
+ ngx_uint_t flags);
+static ngx_int_t ngx_eventport_del_event(ngx_event_t *ev, ngx_int_t event,
+ ngx_uint_t flags);
static ngx_int_t ngx_eventport_process_events(ngx_cycle_t *cycle,
ngx_msec_t timer, ngx_uint_t flags);
@@ -105,7 +105,7 @@ static char *ngx_eventport_init_conf(ngx_cycle_t *cycle, void *conf);
static int ep = -1;
static port_event_t *event_list;
-static u_int nevents;
+static ngx_uint_t nevents;
static timer_t event_timer = -1;
static ngx_str_t eventport_name = ngx_string("eventport");
@@ -261,9 +261,9 @@ ngx_eventport_done(ngx_cycle_t *cycle)
static ngx_int_t
-ngx_eventport_add_event(ngx_event_t *ev, int event, u_int flags)
+ngx_eventport_add_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
{
- int events, prev;
+ ngx_int_t events, prev;
ngx_event_t *e;
ngx_connection_t *c;
@@ -291,7 +291,7 @@ ngx_eventport_add_event(ngx_event_t *ev, int event, u_int flags)
}
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
- "eventport add event: fd:%d ev:%04Xd", c->fd, events);
+ "eventport add event: fd:%d ev:%04Xi", c->fd, events);
if (port_associate(ep, PORT_SOURCE_FD, c->fd, events,
(void *) ((uintptr_t) ev | ev->instance))
@@ -310,7 +310,7 @@ ngx_eventport_add_event(ngx_event_t *ev, int event, u_int flags)
static ngx_int_t
-ngx_eventport_del_event(ngx_event_t *ev, int event, u_int flags)
+ngx_eventport_del_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
{
ngx_event_t *e;
ngx_connection_t *c;
@@ -340,7 +340,7 @@ ngx_eventport_del_event(ngx_event_t *ev, int event, u_int flags)
if (e->oneshot) {
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
- "eventport change event: fd:%d ev:%04Xd", c->fd, event);
+ "eventport change event: fd:%d ev:%04Xi", c->fd, event);
if (port_associate(ep, PORT_SOURCE_FD, c->fd, event,
(void *) ((uintptr_t) ev | ev->instance))
@@ -396,7 +396,7 @@ ngx_eventport_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
events = 1;
- n = port_getn(ep, event_list, nevents, &events, tp);
+ n = port_getn(ep, event_list, (u_int) nevents, &events, tp);
err = ngx_errno;
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index af9167593..c5fd6d80e 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -11,16 +11,19 @@
typedef struct {
- int changes;
- int events;
+ ngx_uint_t changes;
+ ngx_uint_t events;
} ngx_kqueue_conf_t;
static ngx_int_t ngx_kqueue_init(ngx_cycle_t *cycle, ngx_msec_t timer);
static void ngx_kqueue_done(ngx_cycle_t *cycle);
-static ngx_int_t ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags);
-static ngx_int_t ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags);
-static ngx_int_t ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags);
+static ngx_int_t ngx_kqueue_add_event(ngx_event_t *ev, ngx_int_t event,
+ ngx_uint_t flags);
+static ngx_int_t ngx_kqueue_del_event(ngx_event_t *ev, ngx_int_t event,
+ ngx_uint_t flags);
+static ngx_int_t ngx_kqueue_set_event(ngx_event_t *ev, ngx_int_t filter,
+ ngx_uint_t flags);
static ngx_int_t ngx_kqueue_process_changes(ngx_cycle_t *cycle, ngx_uint_t try);
static ngx_int_t ngx_kqueue_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
ngx_uint_t flags);
@@ -43,7 +46,7 @@ int ngx_kqueue = -1;
static struct kevent *change_list, *change_list0, *change_list1;
static struct kevent *event_list;
-static int max_changes, nchanges, nevents;
+static ngx_uint_t max_changes, nchanges, nevents;
#if (NGX_THREADS)
static ngx_mutex_t *list_mutex;
@@ -151,7 +154,9 @@ ngx_kqueue_init(ngx_cycle_t *cycle, ngx_msec_t timer)
ts.tv_sec = 0;
ts.tv_nsec = 0;
- if (kevent(ngx_kqueue, change_list, nchanges, NULL, 0, &ts) == -1) {
+ if (kevent(ngx_kqueue, change_list, (int) nchanges, NULL, 0, &ts)
+ == -1)
+ {
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
"kevent() failed");
return NGX_ERROR;
@@ -273,7 +278,7 @@ ngx_kqueue_done(ngx_cycle_t *cycle)
static ngx_int_t
-ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags)
+ngx_kqueue_add_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
{
ngx_int_t rc;
#if 0
@@ -289,7 +294,7 @@ ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags)
#if 0
- if (ev->index < (u_int) nchanges
+ if (ev->index < nchanges
&& ((uintptr_t) change_list[ev->index].udata & (uintptr_t) ~1)
== (uintptr_t) ev)
{
@@ -301,10 +306,10 @@ ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags)
*/
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
- "kevent activated: %d: ft:%d",
+ "kevent activated: %d: ft:%i",
ngx_event_ident(ev->data), event);
- if (ev->index < (u_int) --nchanges) {
+ if (ev->index < --nchanges) {
e = (ngx_event_t *)
((uintptr_t) change_list[nchanges].udata & (uintptr_t) ~1);
change_list[ev->index] = change_list[nchanges];
@@ -337,7 +342,7 @@ ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags)
static ngx_int_t
-ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags)
+ngx_kqueue_del_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
{
ngx_int_t rc;
ngx_event_t *e;
@@ -347,19 +352,19 @@ ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags)
ngx_mutex_lock(list_mutex);
- if (ev->index < (u_int) nchanges
+ if (ev->index < nchanges
&& ((uintptr_t) change_list[ev->index].udata & (uintptr_t) ~1)
== (uintptr_t) ev)
{
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
- "kevent deleted: %d: ft:%d",
+ "kevent deleted: %d: ft:%i",
ngx_event_ident(ev->data), event);
/* if the event is still not passed to a kernel we will not pass it */
nchanges--;
- if (ev->index < (u_int) nchanges) {
+ if (ev->index < nchanges) {
e = (ngx_event_t *)
((uintptr_t) change_list[nchanges].udata & (uintptr_t) ~1);
change_list[ev->index] = change_list[nchanges];
@@ -396,7 +401,7 @@ ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags)
static ngx_int_t
-ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags)
+ngx_kqueue_set_event(ngx_event_t *ev, ngx_int_t filter, ngx_uint_t flags)
{
struct kevent *kev;
struct timespec ts;
@@ -405,7 +410,7 @@ ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags)
c = ev->data;
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
- "kevent set event: %d: ft:%d fl:%04Xd",
+ "kevent set event: %d: ft:%i fl:%04Xi",
c->fd, filter, flags);
if (nchanges >= max_changes) {
@@ -415,7 +420,9 @@ ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags)
ts.tv_sec = 0;
ts.tv_nsec = 0;
- if (kevent(ngx_kqueue, change_list, nchanges, NULL, 0, &ts) == -1) {
+ if (kevent(ngx_kqueue, change_list, (int) nchanges, NULL, 0, &ts)
+ == -1)
+ {
ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno, "kevent() failed");
return NGX_ERROR;
}
@@ -426,8 +433,8 @@ ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags)
kev = &change_list[nchanges];
kev->ident = c->fd;
- kev->filter = filter;
- kev->flags = flags;
+ kev->filter = (short) filter;
+ kev->flags = (u_short) flags;
kev->udata = NGX_KQUEUE_UDATA_T ((uintptr_t) ev | ev->instance);
if (filter == EVFILT_VNODE) {
@@ -482,7 +489,7 @@ ngx_kqueue_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
n = 0;
} else {
- n = nchanges;
+ n = (int) nchanges;
nchanges = 0;
}
@@ -510,7 +517,7 @@ ngx_kqueue_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"kevent timer: %M, changes: %d", timer, n);
- events = kevent(ngx_kqueue, change_list, n, event_list, nevents, tp);
+ events = kevent(ngx_kqueue, change_list, n, event_list, (int) nevents, tp);
if (events == -1) {
err = ngx_errno;
@@ -696,7 +703,7 @@ ngx_kqueue_process_changes(ngx_cycle_t *cycle, ngx_uint_t try)
change_list = change_list0;
}
- n = nchanges;
+ n = (int) nchanges;
nchanges = 0;
ngx_mutex_unlock(list_mutex);
@@ -758,8 +765,8 @@ ngx_kqueue_init_conf(ngx_cycle_t *cycle, void *conf)
{
ngx_kqueue_conf_t *kcf = conf;
- ngx_conf_init_value(kcf->changes, 512);
- ngx_conf_init_value(kcf->events, 512);
+ ngx_conf_init_uint_value(kcf->changes, 512);
+ ngx_conf_init_uint_value(kcf->events, 512);
return NGX_CONF_OK;
}
diff --git a/src/event/modules/ngx_kqueue_module.h b/src/event/modules/ngx_kqueue_module.h
index 2e000c4ec..096d4ae05 100644
--- a/src/event/modules/ngx_kqueue_module.h
+++ b/src/event/modules/ngx_kqueue_module.h
@@ -13,5 +13,4 @@ extern ngx_module_t ngx_kqueue_module;
extern ngx_event_module_t ngx_kqueue_module_ctx;
-
#endif /* _NGX_KQUEUE_MODULE_H_INCLUDED_ */
diff --git a/src/event/modules/ngx_poll_module.c b/src/event/modules/ngx_poll_module.c
index 199b25bff..db9c41945 100644
--- a/src/event/modules/ngx_poll_module.c
+++ b/src/event/modules/ngx_poll_module.c
@@ -11,15 +11,17 @@
static ngx_int_t ngx_poll_init(ngx_cycle_t *cycle, ngx_msec_t timer);
static void ngx_poll_done(ngx_cycle_t *cycle);
-static ngx_int_t ngx_poll_add_event(ngx_event_t *ev, int event, u_int flags);
-static ngx_int_t ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags);
+static ngx_int_t ngx_poll_add_event(ngx_event_t *ev, ngx_int_t event,
+ ngx_uint_t flags);
+static ngx_int_t ngx_poll_del_event(ngx_event_t *ev, ngx_int_t event,
+ ngx_uint_t flags);
static ngx_int_t ngx_poll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
ngx_uint_t flags);
static char *ngx_poll_init_conf(ngx_cycle_t *cycle, void *conf);
static struct pollfd *event_list;
-static int nevents;
+static ngx_int_t nevents;
static ngx_str_t poll_name = ngx_string("poll");
@@ -108,7 +110,7 @@ ngx_poll_done(ngx_cycle_t *cycle)
static ngx_int_t
-ngx_poll_add_event(ngx_event_t *ev, int event, u_int flags)
+ngx_poll_add_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
{
ngx_event_t *e;
ngx_connection_t *c;
@@ -119,7 +121,7 @@ ngx_poll_add_event(ngx_event_t *ev, int event, u_int flags)
if (ev->index != NGX_INVALID_INDEX) {
ngx_log_error(NGX_LOG_ALERT, ev->log, 0,
- "poll event fd:%d ev:%d is already set", c->fd, event);
+ "poll event fd:%d ev:%i is already set", c->fd, event);
return NGX_OK;
}
@@ -137,11 +139,11 @@ ngx_poll_add_event(ngx_event_t *ev, int event, u_int flags)
}
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
- "poll add event: fd:%d ev:%d", c->fd, event);
+ "poll add event: fd:%d ev:%i", c->fd, event);
if (e == NULL || e->index == NGX_INVALID_INDEX) {
event_list[nevents].fd = c->fd;
- event_list[nevents].events = event;
+ event_list[nevents].events = (short) event;
event_list[nevents].revents = 0;
ev->index = nevents;
@@ -149,9 +151,9 @@ ngx_poll_add_event(ngx_event_t *ev, int event, u_int flags)
} else {
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ev->log, 0,
- "poll add index: %d", e->index);
+ "poll add index: %i", e->index);
- event_list[e->index].events |= event;
+ event_list[e->index].events |= (short) event;
ev->index = e->index;
}
@@ -160,7 +162,7 @@ ngx_poll_add_event(ngx_event_t *ev, int event, u_int flags)
static ngx_int_t
-ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags)
+ngx_poll_del_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
{
ngx_event_t *e;
ngx_connection_t *c;
@@ -171,7 +173,7 @@ ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags)
if (ev->index == NGX_INVALID_INDEX) {
ngx_log_error(NGX_LOG_ALERT, ev->log, 0,
- "poll event fd:%d ev:%d is already deleted",
+ "poll event fd:%d ev:%i is already deleted",
c->fd, event);
return NGX_OK;
}
@@ -190,15 +192,15 @@ ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags)
}
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
- "poll del event: fd:%d ev:%d", c->fd, event);
+ "poll del event: fd:%d ev:%i", c->fd, event);
if (e == NULL || e->index == NGX_INVALID_INDEX) {
nevents--;
- if (ev->index < (u_int) nevents) {
+ if (ev->index < (ngx_uint_t) nevents) {
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
- "index: copy event %d to %d", nevents, ev->index);
+ "index: copy event %ui to %i", nevents, ev->index);
event_list[ev->index] = event_list[nevents];
@@ -209,11 +211,11 @@ ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags)
"unexpected last event");
} else {
- if (c->read->index == (u_int) nevents) {
+ if (c->read->index == (ngx_uint_t) nevents) {
c->read->index = ev->index;
}
- if (c->write->index == (u_int) nevents) {
+ if (c->write->index == (ngx_uint_t) nevents) {
c->write->index = ev->index;
}
}
@@ -221,9 +223,9 @@ ngx_poll_del_event(ngx_event_t *ev, int event, u_int flags)
} else {
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ev->log, 0,
- "poll del index: %d", e->index);
+ "poll del index: %i", e->index);
- event_list[e->index].events &= ~event;
+ event_list[e->index].events &= (short) ~event;
}
ev->index = NGX_INVALID_INDEX;
diff --git a/src/event/modules/ngx_rtsig_module.c b/src/event/modules/ngx_rtsig_module.c
index 603cd883f..761ebe68c 100644
--- a/src/event/modules/ngx_rtsig_module.c
+++ b/src/event/modules/ngx_rtsig_module.c
@@ -29,10 +29,10 @@ int ngx_linux_rtsig_max;
typedef struct {
- int signo;
- ngx_int_t overflow_events;
- ngx_int_t overflow_test;
- ngx_int_t overflow_threshold;
+ ngx_uint_t signo;
+ ngx_uint_t overflow_events;
+ ngx_uint_t overflow_test;
+ ngx_uint_t overflow_threshold;
} ngx_rtsig_conf_t;
@@ -41,7 +41,8 @@ extern ngx_event_module_t ngx_poll_module_ctx;
static ngx_int_t ngx_rtsig_init(ngx_cycle_t *cycle, ngx_msec_t timer);
static void ngx_rtsig_done(ngx_cycle_t *cycle);
static ngx_int_t ngx_rtsig_add_connection(ngx_connection_t *c);
-static ngx_int_t ngx_rtsig_del_connection(ngx_connection_t *c, u_int flags);
+static ngx_int_t ngx_rtsig_del_connection(ngx_connection_t *c,
+ ngx_uint_t flags);
static ngx_int_t ngx_rtsig_process_events(ngx_cycle_t *cycle,
ngx_msec_t timer, ngx_uint_t flags);
static ngx_int_t ngx_rtsig_process_overflow(ngx_cycle_t *cycle,
@@ -143,8 +144,8 @@ ngx_rtsig_init(ngx_cycle_t *cycle, ngx_msec_t timer)
rtscf = ngx_event_get_conf(cycle->conf_ctx, ngx_rtsig_module);
sigemptyset(&set);
- sigaddset(&set, rtscf->signo);
- sigaddset(&set, rtscf->signo + 1);
+ sigaddset(&set, (int) rtscf->signo);
+ sigaddset(&set, (int) rtscf->signo + 1);
sigaddset(&set, SIGIO);
sigaddset(&set, SIGALRM);
@@ -188,7 +189,7 @@ ngx_rtsig_done(ngx_cycle_t *cycle)
static ngx_int_t
ngx_rtsig_add_connection(ngx_connection_t *c)
{
- int signo;
+ ngx_uint_t signo;
ngx_rtsig_conf_t *rtscf;
if (c->read->accept && c->read->disabled) {
@@ -211,7 +212,7 @@ ngx_rtsig_add_connection(ngx_connection_t *c)
signo = rtscf->signo + c->read->instance;
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
- "rtsig add connection: fd:%d signo:%d", c->fd, signo);
+ "rtsig add connection: fd:%d signo:%ui", c->fd, signo);
if (fcntl(c->fd, F_SETFL, O_RDWR|O_NONBLOCK|O_ASYNC) == -1) {
ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
@@ -219,7 +220,7 @@ ngx_rtsig_add_connection(ngx_connection_t *c)
return NGX_ERROR;
}
- if (fcntl(c->fd, F_SETSIG, signo) == -1) {
+ if (fcntl(c->fd, F_SETSIG, (int) signo) == -1) {
ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,
"fcntl(F_SETSIG) failed");
return NGX_ERROR;
@@ -247,7 +248,7 @@ ngx_rtsig_add_connection(ngx_connection_t *c)
static ngx_int_t
-ngx_rtsig_del_connection(ngx_connection_t *c, u_int flags)
+ngx_rtsig_del_connection(ngx_connection_t *c, ngx_uint_t flags)
{
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
"rtsig del connection: fd:%d", c->fd);
@@ -348,7 +349,7 @@ ngx_rtsig_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
rtscf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_rtsig_module);
- if (signo == rtscf->signo || signo == rtscf->signo + 1) {
+ if (signo == (int) rtscf->signo || signo == (int) rtscf->signo + 1) {
if (overflow && (ngx_uint_t) si.si_fd > overflow_current) {
return NGX_OK;
@@ -363,7 +364,7 @@ ngx_rtsig_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
return NGX_OK;
}
- instance = signo - rtscf->signo;
+ instance = signo - (int) rtscf->signo;
rev = c->read;
@@ -459,8 +460,8 @@ ngx_rtsig_process_overflow(ngx_cycle_t *cycle, ngx_msec_t timer,
{
int name[2], rtsig_max, rtsig_nr, events, ready;
size_t len;
- ngx_int_t tested, n, i;
ngx_err_t err;
+ ngx_uint_t tested, n, i;
ngx_event_t *rev, *wev, **queue;
ngx_connection_t *c;
ngx_rtsig_conf_t *rtscf;
@@ -638,7 +639,7 @@ ngx_rtsig_process_overflow(ngx_cycle_t *cycle, ngx_msec_t timer,
* "/proc/sys/kernel/rtsig-max" / "rtsig_overflow_threshold"
*/
- if (rtsig_max / rtscf->overflow_threshold < rtsig_nr) {
+ if (rtsig_max / (int) rtscf->overflow_threshold < rtsig_nr) {
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"rtsig queue state: %d/%d",
rtsig_nr, rtsig_max);
@@ -703,19 +704,18 @@ ngx_rtsig_init_conf(ngx_cycle_t *cycle, void *conf)
ngx_rtsig_conf_t *rtscf = conf;
/* LinuxThreads use the first 3 RT signals */
- ngx_conf_init_value(rtscf->signo, SIGRTMIN + 10);
+ ngx_conf_init_uint_value(rtscf->signo, SIGRTMIN + 10);
- ngx_conf_init_value(rtscf->overflow_events, 16);
- ngx_conf_init_value(rtscf->overflow_test, 32);
- ngx_conf_init_value(rtscf->overflow_threshold, 10);
+ ngx_conf_init_uint_value(rtscf->overflow_events, 16);
+ ngx_conf_init_uint_value(rtscf->overflow_test, 32);
+ ngx_conf_init_uint_value(rtscf->overflow_threshold, 10);
return NGX_CONF_OK;
}
static char *
-ngx_check_ngx_overflow_threshold_bounds(ngx_conf_t *cf,
- void *post, void *data)
+ngx_check_ngx_overflow_threshold_bounds(ngx_conf_t *cf, void *post, void *data)
{
if (ngx_linux_rtsig_max) {
return ngx_conf_check_num_bounds(cf, post, data);
diff --git a/src/event/modules/ngx_select_module.c b/src/event/modules/ngx_select_module.c
index 9ecac7f2b..1e704c2f6 100644
--- a/src/event/modules/ngx_select_module.c
+++ b/src/event/modules/ngx_select_module.c
@@ -12,8 +12,10 @@
static ngx_int_t ngx_select_init(ngx_cycle_t *cycle, ngx_msec_t timer);
static void ngx_select_done(ngx_cycle_t *cycle);
-static ngx_int_t ngx_select_add_event(ngx_event_t *ev, int event, u_int flags);
-static ngx_int_t ngx_select_del_event(ngx_event_t *ev, int event, u_int flags);
+static ngx_int_t ngx_select_add_event(ngx_event_t *ev, ngx_int_t event,
+ ngx_uint_t flags);
+static ngx_int_t ngx_select_del_event(ngx_event_t *ev, ngx_int_t event,
+ ngx_uint_t flags);
static ngx_int_t ngx_select_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
ngx_uint_t flags);
static char *ngx_select_init_conf(ngx_cycle_t *cycle, void *conf);
@@ -25,10 +27,10 @@ static fd_set work_read_fd_set;
static fd_set work_write_fd_set;
#if (NGX_WIN32)
-static int max_read;
-static int max_write;
+static ngx_uint_t max_read;
+static ngx_uint_t max_write;
#else
-static int max_fd;
+static ngx_int_t max_fd;
#endif
static ngx_uint_t nevents;
@@ -129,18 +131,18 @@ ngx_select_done(ngx_cycle_t *cycle)
static ngx_int_t
-ngx_select_add_event(ngx_event_t *ev, int event, u_int flags)
+ngx_select_add_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
{
ngx_connection_t *c;
c = ev->data;
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
- "select add event fd:%d ev:%d", c->fd, event);
+ "select add event fd:%d ev:%i", c->fd, event);
if (ev->index != NGX_INVALID_INDEX) {
ngx_log_error(NGX_LOG_ALERT, ev->log, 0,
- "select event fd:%d ev:%d is already set", c->fd, event);
+ "select event fd:%d ev:%i is already set", c->fd, event);
return NGX_OK;
}
@@ -190,7 +192,7 @@ ngx_select_add_event(ngx_event_t *ev, int event, u_int flags)
static ngx_int_t
-ngx_select_del_event(ngx_event_t *ev, int event, u_int flags)
+ngx_select_del_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
{
ngx_connection_t *c;
@@ -203,7 +205,7 @@ ngx_select_del_event(ngx_event_t *ev, int event, u_int flags)
}
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
- "select del event fd:%d ev:%d", c->fd, event);
+ "select del event fd:%d ev:%i", c->fd, event);
#if (NGX_WIN32)
@@ -231,7 +233,7 @@ ngx_select_del_event(ngx_event_t *ev, int event, u_int flags)
#endif
- if (ev->index < (u_int) --nevents) {
+ if (ev->index < --nevents) {
event_index[ev->index] = event_index[nevents];
event_index[ev->index]->index = ev->index;
}
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index 91efde009..d32fb7ffd 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -276,7 +276,7 @@ ngx_process_events_and_timers(ngx_cycle_t *cycle)
ngx_int_t
-ngx_handle_read_event(ngx_event_t *rev, u_int flags)
+ngx_handle_read_event(ngx_event_t *rev, ngx_uint_t flags)
{
if (ngx_event_flags & NGX_USE_CLEAR_EVENT) {
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index e1388d5f0..a2b7c5cc5 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -126,7 +126,7 @@ struct ngx_event_s {
#endif
- u_int index;
+ ngx_uint_t index;
ngx_log_t *log;
@@ -182,7 +182,7 @@ struct ngx_event_s {
/* event should not cross cache line in SMP */
- int padding[NGX_EVENT_T_PADDING];
+ uint32_t padding[NGX_EVENT_T_PADDING];
#endif
#endif
};
@@ -195,14 +195,14 @@ typedef struct {
typedef struct {
- ngx_int_t (*add)(ngx_event_t *ev, int event, u_int flags);
- ngx_int_t (*del)(ngx_event_t *ev, int event, u_int flags);
+ ngx_int_t (*add)(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags);
+ ngx_int_t (*del)(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags);
- ngx_int_t (*enable)(ngx_event_t *ev, int event, u_int flags);
- ngx_int_t (*disable)(ngx_event_t *ev, int event, u_int flags);
+ ngx_int_t (*enable)(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags);
+ ngx_int_t (*disable)(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags);
ngx_int_t (*add_conn)(ngx_connection_t *c);
- ngx_int_t (*del_conn)(ngx_connection_t *c, u_int flags);
+ ngx_int_t (*del_conn)(ngx_connection_t *c, ngx_uint_t flags);
ngx_int_t (*process_changes)(ngx_cycle_t *cycle, ngx_uint_t nowait);
ngx_int_t (*process_events)(ngx_cycle_t *cycle, ngx_msec_t timer,
@@ -489,7 +489,7 @@ u_char *ngx_accept_log_error(ngx_log_t *log, u_char *buf, size_t len);
void ngx_process_events_and_timers(ngx_cycle_t *cycle);
-ngx_int_t ngx_handle_read_event(ngx_event_t *rev, u_int flags);
+ngx_int_t ngx_handle_read_event(ngx_event_t *rev, ngx_uint_t flags);
ngx_int_t ngx_handle_write_event(ngx_event_t *wev, size_t lowat);
diff --git a/src/event/ngx_event_busy_lock.c b/src/event/ngx_event_busy_lock.c
index 2d0bad571..c5cecc3f5 100644
--- a/src/event/ngx_event_busy_lock.c
+++ b/src/event/ngx_event_busy_lock.c
@@ -9,7 +9,7 @@
#include <ngx_event.h>
-static int ngx_event_busy_lock_look_cachable(ngx_event_busy_lock_t *bl,
+static ngx_int_t ngx_event_busy_lock_look_cachable(ngx_event_busy_lock_t *bl,
ngx_event_busy_lock_ctx_t *ctx);
static void ngx_event_busy_lock_handler(ngx_event_t *ev);
static void ngx_event_busy_lock_posted_handler(ngx_event_t *ev);
diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
index d31196887..5cfc703e8 100644
--- a/src/event/ngx_event_openssl.c
+++ b/src/event/ngx_event_openssl.c
@@ -198,7 +198,7 @@ ngx_int_t
ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert,
ngx_str_t *key)
{
- if (ngx_conf_full_name(cf->cycle, cert) == NGX_ERROR) {
+ if (ngx_conf_full_name(cf->cycle, cert, 1) == NGX_ERROR) {
return NGX_ERROR;
}
@@ -211,7 +211,7 @@ ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert,
return NGX_ERROR;
}
- if (ngx_conf_full_name(cf->cycle, key) == NGX_ERROR) {
+ if (ngx_conf_full_name(cf->cycle, key, 1) == NGX_ERROR) {
return NGX_ERROR;
}
@@ -242,7 +242,7 @@ ngx_ssl_client_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert,
return NGX_OK;
}
- if (ngx_conf_full_name(cf->cycle, cert) == NGX_ERROR) {
+ if (ngx_conf_full_name(cf->cycle, cert, 1) == NGX_ERROR) {
return NGX_ERROR;
}
@@ -784,7 +784,7 @@ ngx_ssl_send_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
/* the maximum limit size is the maximum uint32_t value - the page size */
- if (limit == 0 || limit > NGX_MAX_UINT32_VALUE - ngx_pagesize) {
+ if (limit == 0 || limit > (off_t) (NGX_MAX_UINT32_VALUE - ngx_pagesize)) {
limit = NGX_MAX_UINT32_VALUE - ngx_pagesize;
}
diff --git a/src/http/modules/ngx_http_auth_basic_module.c b/src/http/modules/ngx_http_auth_basic_module.c
index 19bfe996e..72b4bbdcb 100644
--- a/src/http/modules/ngx_http_auth_basic_module.c
+++ b/src/http/modules/ngx_http_auth_basic_module.c
@@ -352,7 +352,7 @@ ngx_http_auth_basic_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
}
if (conf->user_file.data) {
- if (ngx_conf_full_name(cf->cycle, &conf->user_file) != NGX_OK) {
+ if (ngx_conf_full_name(cf->cycle, &conf->user_file, 1) != NGX_OK) {
return NGX_CONF_ERROR;
}
diff --git a/src/http/modules/ngx_http_geo_module.c b/src/http/modules/ngx_http_geo_module.c
index 62ef72cf9..9c43bd716 100644
--- a/src/http/modules/ngx_http_geo_module.c
+++ b/src/http/modules/ngx_http_geo_module.c
@@ -198,7 +198,7 @@ ngx_http_geo(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
if (ngx_strcmp(value[0].data, "include") == 0) {
file = value[1];
- if (ngx_conf_full_name(cf->cycle, &file) == NGX_ERROR){
+ if (ngx_conf_full_name(cf->cycle, &file, 1) == NGX_ERROR){
return NGX_CONF_ERROR;
}
diff --git a/src/http/modules/ngx_http_map_module.c b/src/http/modules/ngx_http_map_module.c
index 4a8acd00d..7b3a363fc 100644
--- a/src/http/modules/ngx_http_map_module.c
+++ b/src/http/modules/ngx_http_map_module.c
@@ -378,7 +378,7 @@ ngx_http_map(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
if (ngx_strcmp(value[0].data, "include") == 0) {
file = value[1];
- if (ngx_conf_full_name(cf->cycle, &file) == NGX_ERROR){
+ if (ngx_conf_full_name(cf->cycle, &file, 1) == NGX_ERROR){
return NGX_CONF_ERROR;
}
diff --git a/src/http/modules/ngx_http_proxy_module.c b/src/http/modules/ngx_http_proxy_module.c
index c999adea2..52f67b305 100644
--- a/src/http/modules/ngx_http_proxy_module.c
+++ b/src/http/modules/ngx_http_proxy_module.c
@@ -2237,6 +2237,7 @@ ngx_http_proxy_pass(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
if (port == 80) {
plcf->port.len = sizeof("80") - 1;
plcf->port.data = (u_char *) "80";
+
} else {
plcf->port.len = sizeof("443") - 1;
plcf->port.data = (u_char *) "443";
@@ -2275,13 +2276,17 @@ ngx_http_proxy_pass(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
plcf->upstream.location = clcf->name;
+ if (clcf->named
#if (NGX_PCRE)
-
- if (clcf->regex || clcf->noname) {
+ || clcf->regex
+#endif
+ || clcf->noname)
+ {
if (plcf->upstream.uri.len) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"\"proxy_pass\" may not have URI part in "
"location given by regular expression, "
+ "or inside named location, "
"or inside the \"if\" statement, "
"or inside the \"limit_except\" block");
return NGX_CONF_ERROR;
@@ -2290,8 +2295,6 @@ ngx_http_proxy_pass(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
plcf->upstream.location.len = 0;
}
-#endif
-
plcf->upstream.url = *url;
if (clcf->name.data[clcf->name.len - 1] == '/') {
diff --git a/src/http/modules/perl/nginx.pm b/src/http/modules/perl/nginx.pm
index f510f2df0..ca86b7840 100644
--- a/src/http/modules/perl/nginx.pm
+++ b/src/http/modules/perl/nginx.pm
@@ -47,7 +47,7 @@ our @EXPORT = qw(
HTTP_INSUFFICIENT_STORAGE
);
-our $VERSION = '0.6.5';
+our $VERSION = '0.6.6';
require XSLoader;
XSLoader::load('nginx', $VERSION);
diff --git a/src/http/modules/perl/ngx_http_perl_module.c b/src/http/modules/perl/ngx_http_perl_module.c
index 248f57823..836a415c9 100644
--- a/src/http/modules/perl/ngx_http_perl_module.c
+++ b/src/http/modules/perl/ngx_http_perl_module.c
@@ -454,7 +454,7 @@ ngx_http_perl_init_interpreter(ngx_conf_t *cf, ngx_http_perl_main_conf_t *pmcf)
#endif
if (pmcf->modules.data) {
- if (ngx_conf_full_name(cf->cycle, &pmcf->modules) != NGX_OK) {
+ if (ngx_conf_full_name(cf->cycle, &pmcf->modules, 0) != NGX_OK) {
return NGX_CONF_ERROR;
}
}
diff --git a/src/http/ngx_http.c b/src/http/ngx_http.c
index 5823a2b91..dfe6eff70 100644
--- a/src/http/ngx_http.c
+++ b/src/http/ngx_http.c
@@ -401,6 +401,7 @@ ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
cmcf->phase_engine.server_rewrite_index = (ngx_uint_t) -1;
+ cmcf->phase_engine.location_rewrite_index = (ngx_uint_t) -1;
find_config_index = 0;
use_rewrite = cmcf->phases[NGX_HTTP_REWRITE_PHASE].handlers.nelts ? 1 : 0;
use_access = cmcf->phases[NGX_HTTP_ACCESS_PHASE].handlers.nelts ? 1 : 0;
@@ -442,6 +443,14 @@ ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
continue;
+ case NGX_HTTP_REWRITE_PHASE:
+ if (cmcf->phase_engine.location_rewrite_index == (ngx_uint_t) -1) {
+ cmcf->phase_engine.location_rewrite_index = n;
+ }
+ checker = ngx_http_core_generic_phase;
+
+ break;
+
case NGX_HTTP_POST_REWRITE_PHASE:
if (use_rewrite) {
ph->checker = ngx_http_core_post_rewrite_phase;
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index a903c9a24..0e732cfe2 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -945,13 +945,12 @@ ngx_http_core_find_location(ngx_http_request_t *r,
clcfp = locations->elts;
for (i = 0; i < locations->nelts; i++) {
+ if (clcfp[i]->noname
#if (NGX_PCRE)
- if (clcfp[i]->regex) {
- break;
- }
+ || clcfp[i]->regex
#endif
-
- if (clcfp[i]->noname) {
+ || clcfp[i]->named)
+ {
break;
}
@@ -1028,7 +1027,7 @@ ngx_http_core_find_location(ngx_http_request_t *r,
for (i = regex_start; i < locations->nelts; i++) {
- if (clcfp[i]->noname) {
+ if (!clcfp[i]->regex) {
break;
}
@@ -1223,7 +1222,8 @@ ngx_http_map_uri_to_path(ngx_http_request_t *r, ngx_str_t *path,
return NULL;
}
- if (ngx_conf_full_name((ngx_cycle_t *) ngx_cycle, path) == NGX_ERROR) {
+ if (ngx_conf_full_name((ngx_cycle_t *) ngx_cycle, path, 0)== NGX_ERROR)
+ {
return NULL;
}
@@ -1513,6 +1513,51 @@ ngx_http_internal_redirect(ngx_http_request_t *r,
}
+ngx_int_t
+ngx_http_named_location(ngx_http_request_t *r, ngx_str_t *name)
+{
+ ngx_uint_t i;
+ ngx_http_core_srv_conf_t *cscf;
+ ngx_http_core_loc_conf_t **clcfp;
+ ngx_http_core_main_conf_t *cmcf;
+
+ cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
+
+ clcfp = cscf->locations.elts;
+
+ for (i = cscf->named_start; i < cscf->locations.nelts; i++) {
+
+ if (name->len != clcfp[i]->name.len
+ || ngx_strncmp(name->data, clcfp[i]->name.data, name->len) != 0)
+ {
+ continue;
+ }
+
+ ngx_log_debug3(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
+ "named location: %V \"%V?%V\"", name, &r->uri, &r->args);
+
+ r->internal = 1;
+
+ r->loc_conf = clcfp[i]->loc_conf;
+
+ ngx_http_update_location_config(r);
+
+ cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
+
+ r->phase_handler = cmcf->phase_engine.location_rewrite_index;
+ ngx_http_core_run_phases(r);
+
+ return NGX_DONE;
+ }
+
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
+ "could not find name location \"%V\"", name);
+
+ ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
+ return NGX_DONE;
+}
+
+
ngx_http_cleanup_t *
ngx_http_cleanup_add(ngx_http_request_t *r, size_t size)
{
@@ -1557,10 +1602,8 @@ ngx_http_core_server(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy)
ngx_http_module_t *module;
ngx_http_conf_ctx_t *ctx, *http_ctx;
ngx_http_core_srv_conf_t *cscf, **cscfp;
- ngx_http_core_main_conf_t *cmcf;
-#if (NGX_PCRE)
ngx_http_core_loc_conf_t **clcfp;
-#endif
+ ngx_http_core_main_conf_t *cmcf;
ctx = ngx_pcalloc(cf->pool, sizeof(ngx_http_conf_ctx_t));
if (ctx == NULL) {
@@ -1644,10 +1687,11 @@ ngx_http_core_server(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy)
ngx_sort(cscf->locations.elts, (size_t) cscf->locations.nelts,
sizeof(ngx_http_core_loc_conf_t *), ngx_http_core_cmp_locations);
+ clcfp = cscf->locations.elts;
+
#if (NGX_PCRE)
cscf->regex_start = cscf->locations.nelts;
- clcfp = cscf->locations.elts;
for (i = 0; i < cscf->locations.nelts; i++) {
if (clcfp[i]->regex) {
@@ -1658,6 +1702,15 @@ ngx_http_core_server(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy)
#endif
+ cscf->named_start = cscf->locations.nelts;
+
+ for (i = 0; i < cscf->locations.nelts; i++) {
+ if (clcfp[i]->named) {
+ cscf->named_start = i;
+ break;
+ }
+ }
+
return rv;
}
@@ -1758,7 +1811,12 @@ ngx_http_core_location(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy)
}
} else {
+
clcf->name = value[1];
+
+ if (value[1].data[0] == '@') {
+ clcf->named = 1;
+ }
}
pclcf = pctx->loc_conf[ngx_http_core_module.ctx_index];
@@ -1784,6 +1842,14 @@ ngx_http_core_location(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy)
return NGX_CONF_ERROR;
}
+ if (pclcf->named) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "location \"%V\" could not be inside "
+ "the named location \"%V\"",
+ &clcf->name, &pclcf->name);
+ return NGX_CONF_ERROR;
+ }
+
#if (NGX_PCRE)
if (clcf->regex == NULL
&& ngx_strncmp(clcf->name.data, pclcf->name.data, pclcf->name.len)
@@ -1861,6 +1927,20 @@ ngx_http_core_cmp_locations(const void *one, const void *two)
first = *(ngx_http_core_loc_conf_t **) one;
second = *(ngx_http_core_loc_conf_t **) two;
+ if (first->named && !second->named) {
+ /* shift named locations to the end */
+ return 1;
+ }
+
+ if (!first->named && second->named) {
+ /* shift named locations to the end */
+ return -1;
+ }
+
+ if (first->named && second->named) {
+ return ngx_strcmp(first->name.data, second->name.data);
+ }
+
if (first->noname && !second->noname) {
/* shift no named locations to the end */
return 1;
@@ -1947,7 +2027,7 @@ ngx_http_core_type(ngx_conf_t *cf, ngx_command_t *dummy, void *conf)
if (ngx_strcmp(value[0].data, "include") == 0) {
file = value[1];
- if (ngx_conf_full_name(cf->cycle, &file) == NGX_ERROR){
+ if (ngx_conf_full_name(cf->cycle, &file, 1) == NGX_ERROR){
return NGX_CONF_ERROR;
}
@@ -2290,7 +2370,7 @@ ngx_http_core_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
conf->root.len = sizeof("html") - 1;
conf->root.data = (u_char *) "html";
- if (ngx_conf_full_name(cf->cycle, &conf->root) == NGX_ERROR) {
+ if (ngx_conf_full_name(cf->cycle, &conf->root, 0) == NGX_ERROR) {
return NGX_CONF_ERROR;
}
}
@@ -2706,6 +2786,14 @@ ngx_http_core_root(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
return NGX_CONF_ERROR;
}
+ if (lcf->named && alias) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "the \"alias\" directive may not be used "
+ "inside named location");
+
+ return NGX_CONF_ERROR;
+ }
+
#if (NGX_PCRE)
if (lcf->regex && alias) {
@@ -2739,7 +2827,7 @@ ngx_http_core_root(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
}
if (lcf->root.data[0] != '$') {
- if (ngx_conf_full_name(cf->cycle, &lcf->root) == NGX_ERROR) {
+ if (ngx_conf_full_name(cf->cycle, &lcf->root, 0) == NGX_ERROR) {
return NGX_CONF_ERROR;
}
}
diff --git a/src/http/ngx_http_core_module.h b/src/http/ngx_http_core_module.h
index 59e4624a9..dc443f64a 100644
--- a/src/http/ngx_http_core_module.h
+++ b/src/http/ngx_http_core_module.h
@@ -79,6 +79,7 @@ struct ngx_http_phase_handler_s {
typedef struct {
ngx_http_phase_handler_t *handlers;
ngx_uint_t server_rewrite_index;
+ ngx_uint_t location_rewrite_index;
} ngx_http_phase_engine_t;
@@ -117,7 +118,8 @@ typedef struct {
*/
ngx_array_t locations;
- unsigned regex_start:16;
+ unsigned regex_start:15;
+ unsigned named_start:15;
unsigned wildcard:1;
/* array of the ngx_http_listen_t, "listen" directive */
@@ -212,9 +214,10 @@ struct ngx_http_core_loc_conf_s {
ngx_regex_t *regex;
#endif
- unsigned regex_start:16;
+ unsigned regex_start:15;
- unsigned noname:1; /* "if () {}" block */
+ unsigned noname:1; /* "if () {}" block or limit_except */
+ unsigned named:1;
unsigned exact_match:1;
unsigned noregex:1;
@@ -314,6 +317,8 @@ ngx_int_t ngx_http_subrequest(ngx_http_request_t *r,
ngx_http_post_subrequest_t *psr, ngx_uint_t flags);
ngx_int_t ngx_http_internal_redirect(ngx_http_request_t *r,
ngx_str_t *uri, ngx_str_t *args);
+ngx_int_t ngx_http_named_location(ngx_http_request_t *r, ngx_str_t *name);
+
ngx_http_cleanup_t *ngx_http_cleanup_add(ngx_http_request_t *r, size_t size);
diff --git a/src/http/ngx_http_special_response.c b/src/http/ngx_http_special_response.c
index 2598116f7..1797603a0 100644
--- a/src/http/ngx_http_special_response.c
+++ b/src/http/ngx_http_special_response.c
@@ -409,6 +409,10 @@ ngx_http_special_response_handler(ngx_http_request_t *r, ngx_int_t error)
return ngx_http_internal_redirect(r, uri, NULL);
}
+ if (uri->data[0] == '@') {
+ return ngx_http_named_location(r, uri);
+ }
+
r->headers_out.location =
ngx_list_push(&r->headers_out.headers);
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index 376b85fcd..bc4567458 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -3209,6 +3209,12 @@ ngx_http_upstream_add(ngx_conf_t *cf, ngx_url_t *u, ngx_uint_t flags)
continue;
}
+ if (uscfp[i]->default_port && u->default_port
+ && uscfp[i]->default_port != u->default_port)
+ {
+ continue;
+ }
+
return uscfp[i];
}
diff --git a/src/http/ngx_http_upstream_round_robin.c b/src/http/ngx_http_upstream_round_robin.c
index af90d1d59..6756d2bc2 100644
--- a/src/http/ngx_http_upstream_round_robin.c
+++ b/src/http/ngx_http_upstream_round_robin.c
@@ -9,6 +9,10 @@
#include <ngx_http.h>
+static ngx_uint_t
+ngx_http_upstream_get_peer(ngx_http_upstream_rr_peers_t *peers);
+
+
ngx_int_t
ngx_http_upstream_init_round_robin(ngx_conf_t *cf,
ngx_http_upstream_srv_conf_t *us)
@@ -215,7 +219,12 @@ ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data)
/* it's a first try - get a current peer */
for ( ;; ) {
- rrp->current = rrp->peers->current;
+ rrp->current = ngx_http_upstream_get_peer(rrp->peers);
+
+ ngx_log_debug2(NGX_LOG_DEBUG_HTTP, pc->log, 0,
+ "get rr peer, current: %ui %i",
+ rrp->current,
+ rrp->peers->peer[rrp->current].current_weight);
n = rrp->current / (8 * sizeof(uintptr_t));
m = (uintptr_t) 1 << rrp->current % (8 * sizeof(uintptr_t));
@@ -236,6 +245,8 @@ ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data)
break;
}
+ peer->current_weight = 0;
+
} else {
rrp->tried[n] |= m;
}
@@ -243,12 +254,6 @@ ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data)
pc->tries--;
}
- rrp->peers->current++;
-
- if (rrp->peers->current >= rrp->peers->number) {
- rrp->peers->current = 0;
- }
-
if (pc->tries) {
continue;
}
@@ -258,16 +263,6 @@ ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data)
peer->current_weight--;
- if (peer->current_weight == 0) {
- peer->current_weight = peer->weight;
-
- rrp->peers->current++;
-
- if (rrp->peers->current >= rrp->peers->number) {
- rrp->peers->current = 0;
- }
- }
-
} else {
for ( ;; ) {
n = rrp->current / (8 * sizeof(uintptr_t));
@@ -290,6 +285,8 @@ ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data)
break;
}
+ peer->current_weight = 0;
+
} else {
rrp->tried[n] |= m;
}
@@ -311,18 +308,6 @@ ngx_http_upstream_get_round_robin_peer(ngx_peer_connection_t *pc, void *data)
}
peer->current_weight--;
-
- if (peer->current_weight == 0) {
- peer->current_weight = peer->weight;
-
- if (rrp->current == rrp->peers->current) {
- rrp->peers->current++;
-
- if (rrp->peers->current >= rrp->peers->number) {
- rrp->peers->current = 0;
- }
- }
- }
}
rrp->tried[n] |= m;
@@ -352,6 +337,61 @@ failed:
}
+static ngx_uint_t
+ngx_http_upstream_get_peer(ngx_http_upstream_rr_peers_t *peers)
+{
+ ngx_uint_t i, n;
+ ngx_http_upstream_rr_peer_t *peer;
+
+ peer = &peers->peer[0];
+
+ for ( ;; ) {
+
+ for (i = 0; i < peers->number; i++) {
+
+ if (peer[i].current_weight <= 0) {
+ continue;
+ }
+
+ n = i;
+
+ while (i < peers->number - 1) {
+
+ i++;
+
+ if (peer[i].current_weight <= 0) {
+ continue;
+ }
+
+ if (peer[n].current_weight * 1000 / peer[i].current_weight
+ >= peer[n].weight * 1000 / peer[i].weight)
+ {
+ return n;
+ }
+
+ n = i;
+ }
+
+ if (peer[i].current_weight > 0) {
+ n = i;
+ }
+
+ return n;
+ }
+
+ for (i = 0; i < peers->number; i++) {
+ if (peer[i].fails == 0) {
+ peer[i].current_weight += peer[i].weight;
+
+ } else {
+ /* 1 allows to go to quick recovery when all peers failed */
+ peer[i].current_weight = 1;
+ }
+ }
+ }
+}
+
+
void
ngx_http_upstream_free_round_robin_peer(ngx_peer_connection_t *pc, void *data,
ngx_uint_t state)
@@ -385,8 +425,14 @@ ngx_http_upstream_free_round_robin_peer(ngx_peer_connection_t *pc, void *data,
peer->fails++;
peer->accessed = now;
- if (peer->current_weight > 1) {
- peer->current_weight /= 2;
+ peer->current_weight -= peer->weight / peer->max_fails;
+
+ ngx_log_debug2(NGX_LOG_DEBUG_HTTP, pc->log, 0,
+ "free rr peer failed: %ui %i",
+ rrp->current, peer->current_weight);
+
+ if (peer->current_weight < 0) {
+ peer->current_weight = 0;
}
/* ngx_unlock_mutex(rrp->peers->mutex); */
diff --git a/src/http/ngx_http_upstream_round_robin.h b/src/http/ngx_http_upstream_round_robin.h
index 2e2bf132f..15e69153a 100644
--- a/src/http/ngx_http_upstream_round_robin.h
+++ b/src/http/ngx_http_upstream_round_robin.h
@@ -18,8 +18,8 @@ typedef struct {
socklen_t socklen;
ngx_str_t name;
- ngx_uint_t current_weight;
- ngx_uint_t weight;
+ ngx_int_t current_weight;
+ ngx_int_t weight;
ngx_uint_t fails;
time_t accessed;
@@ -29,15 +29,13 @@ typedef struct {
ngx_uint_t down; /* unsigned down:1; */
-#if (NGX_SSL)
+#if (NGX_HTTP_SSL)
ngx_ssl_session_t *ssl_session; /* local to a process */
#endif
} ngx_http_upstream_rr_peer_t;
typedef struct {
- ngx_uint_t current;
-
ngx_uint_t number;
ngx_uint_t last_cached;
diff --git a/src/http/ngx_http_variables.c b/src/http/ngx_http_variables.c
index af54d29b0..123017d80 100644
--- a/src/http/ngx_http_variables.c
+++ b/src/http/ngx_http_variables.c
@@ -13,6 +13,8 @@
static ngx_int_t ngx_http_variable_request(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
+static void ngx_http_variable_request_set(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data);
static void ngx_http_variable_request_set_size(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_variable_header(ngx_http_request_t *r,
@@ -39,6 +41,8 @@ static ngx_int_t ngx_http_variable_server_port(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_variable_scheme(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
+static ngx_int_t ngx_http_variable_is_args(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_variable_document_root(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data);
static ngx_int_t ngx_http_variable_request_filename(ngx_http_request_t *r,
@@ -155,9 +159,14 @@ static ngx_http_variable_t ngx_http_core_variables[] = {
offsetof(ngx_http_request_t, args),
NGX_HTTP_VAR_NOCACHABLE, 0 },
- { ngx_string("args"), NULL, ngx_http_variable_request,
+ { ngx_string("args"),
+ ngx_http_variable_request_set,
+ ngx_http_variable_request,
offsetof(ngx_http_request_t, args),
- NGX_HTTP_VAR_NOCACHABLE, 0 },
+ NGX_HTTP_VAR_CHANGABLE|NGX_HTTP_VAR_NOCACHABLE, 0 },
+
+ { ngx_string("is_args"), NULL, ngx_http_variable_is_args,
+ 0, NGX_HTTP_VAR_NOCACHABLE, 0 },
{ ngx_string("request_filename"), NULL,
ngx_http_variable_request_filename, 0,
@@ -501,6 +510,19 @@ ngx_http_variable_request(ngx_http_request_t *r, ngx_http_variable_value_t *v,
static void
+ngx_http_variable_request_set(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data)
+{
+ ngx_str_t *s;
+
+ s = (ngx_str_t *) ((char *) r + data);
+
+ s->len = v->len;
+ s->data = v->data;
+}
+
+
+static void
ngx_http_variable_request_set_size(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{
@@ -860,6 +882,27 @@ ngx_http_variable_scheme(ngx_http_request_t *r,
static ngx_int_t
+ngx_http_variable_is_args(ngx_http_request_t *r,
+ ngx_http_variable_value_t *v, uintptr_t data)
+{
+ v->valid = 1;
+ v->no_cachable = 0;
+ v->not_found = 0;
+
+ if (r->args.len == 0) {
+ v->len = 0;
+ v->data = NULL;
+ return NGX_OK;
+ }
+
+ v->len = 1;
+ v->data = (u_char *) "?";
+
+ return NGX_OK;
+}
+
+
+static ngx_int_t
ngx_http_variable_document_root(ngx_http_request_t *r,
ngx_http_variable_value_t *v, uintptr_t data)
{
@@ -883,7 +926,9 @@ ngx_http_variable_document_root(ngx_http_request_t *r,
return NGX_ERROR;
}
- if (ngx_conf_full_name((ngx_cycle_t *) ngx_cycle, &path) == NGX_ERROR) {
+ if (ngx_conf_full_name((ngx_cycle_t *) ngx_cycle, &path, 0)
+ == NGX_ERROR)
+ {
return NGX_ERROR;
}
diff --git a/src/mail/ngx_mail_proxy_module.c b/src/mail/ngx_mail_proxy_module.c
index 894c01d04..ae2fc4c38 100644
--- a/src/mail/ngx_mail_proxy_module.c
+++ b/src/mail/ngx_mail_proxy_module.c
@@ -866,9 +866,11 @@ ngx_mail_proxy_handler(ngx_event_t *ev)
c->log->action = "proxying";
- if ((s->connection->read->eof || s->proxy->upstream.connection->read->eof)
- && s->buffer->pos == s->buffer->last
- && s->proxy->buffer->pos == s->proxy->buffer->last)
+ if ((s->connection->read->eof && s->buffer->pos == s->buffer->last)
+ || (s->proxy->upstream.connection->read->eof
+ && s->proxy->buffer->pos == s->proxy->buffer->last)
+ || (s->connection->read->eof
+ && s->proxy->upstream.connection->read->eof))
{
action = c->log->action;
c->log->action = NULL;
diff --git a/src/os/unix/ngx_aio_write_chain.c b/src/os/unix/ngx_aio_write_chain.c
index e3d663158..6a156e91b 100644
--- a/src/os/unix/ngx_aio_write_chain.c
+++ b/src/os/unix/ngx_aio_write_chain.c
@@ -21,7 +21,7 @@ ngx_aio_write_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
/* the maximum limit size is the maximum size_t value - the page size */
- if (limit == 0 || limit > NGX_MAX_SIZE_T_VALUE - ngx_pagesize) {
+ if (limit == 0 || limit > (off_t) (NGX_MAX_SIZE_T_VALUE - ngx_pagesize)) {
limit = NGX_MAX_SIZE_T_VALUE - ngx_pagesize;
}
diff --git a/src/os/unix/ngx_freebsd_config.h b/src/os/unix/ngx_freebsd_config.h
index a4e973dc3..0bf4fd525 100644
--- a/src/os/unix/ngx_freebsd_config.h
+++ b/src/os/unix/ngx_freebsd_config.h
@@ -102,7 +102,7 @@ pid_t rfork_thread(int flags, void *stack, int (*func)(void *arg), void *arg);
extern char **environ;
-extern char *malloc_options;
+extern char *malloc_options;
#endif /* _NGX_FREEBSD_CONFIG_H_INCLUDED_ */
diff --git a/src/os/unix/ngx_freebsd_sendfile_chain.c b/src/os/unix/ngx_freebsd_sendfile_chain.c
index 476eff332..c383fbeb5 100644
--- a/src/os/unix/ngx_freebsd_sendfile_chain.c
+++ b/src/os/unix/ngx_freebsd_sendfile_chain.c
@@ -72,7 +72,7 @@ ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
/* the maximum limit size is the maximum size_t value - the page size */
- if (limit == 0 || limit > NGX_MAX_SIZE_T_VALUE - ngx_pagesize) {
+ if (limit == 0 || limit > (off_t) (NGX_MAX_SIZE_T_VALUE - ngx_pagesize)) {
limit = NGX_MAX_SIZE_T_VALUE - ngx_pagesize;
}
diff --git a/src/os/unix/ngx_linux_sendfile_chain.c b/src/os/unix/ngx_linux_sendfile_chain.c
index ab2a3cf1b..e102f27d6 100644
--- a/src/os/unix/ngx_linux_sendfile_chain.c
+++ b/src/os/unix/ngx_linux_sendfile_chain.c
@@ -62,7 +62,7 @@ ngx_linux_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
/* the maximum limit size is 2G-1 - the page size */
- if (limit == 0 || limit > NGX_SENDFILE_LIMIT - ngx_pagesize) {
+ if (limit == 0 || limit > (off_t) (NGX_SENDFILE_LIMIT - ngx_pagesize)) {
limit = NGX_SENDFILE_LIMIT - ngx_pagesize;
}
diff --git a/src/os/unix/ngx_solaris_sendfilev_chain.c b/src/os/unix/ngx_solaris_sendfilev_chain.c
index 04e33666a..2feae2fc8 100644
--- a/src/os/unix/ngx_solaris_sendfilev_chain.c
+++ b/src/os/unix/ngx_solaris_sendfilev_chain.c
@@ -67,7 +67,7 @@ ngx_solaris_sendfilev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
/* the maximum limit size is the maximum size_t value - the page size */
- if (limit == 0 || limit > NGX_MAX_SIZE_T_VALUE - ngx_pagesize) {
+ if (limit == 0 || limit > (off_t) (NGX_MAX_SIZE_T_VALUE - ngx_pagesize)) {
limit = NGX_MAX_SIZE_T_VALUE - ngx_pagesize;
}
diff --git a/src/os/unix/ngx_writev_chain.c b/src/os/unix/ngx_writev_chain.c
index c8eb48269..b8754cda3 100644
--- a/src/os/unix/ngx_writev_chain.c
+++ b/src/os/unix/ngx_writev_chain.c
@@ -48,7 +48,7 @@ ngx_writev_chain(ngx_connection_t *c, ngx_chain_t *in, off_t limit)
/* the maximum limit size is the maximum size_t value - the page size */
- if (limit == 0 || limit > NGX_MAX_SIZE_T_VALUE - ngx_pagesize) {
+ if (limit == 0 || limit > (off_t) (NGX_MAX_SIZE_T_VALUE - ngx_pagesize)) {
limit = NGX_MAX_SIZE_T_VALUE - ngx_pagesize;
}