nginxtra 1.2.2.4 → 1.2.3.4
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/nginxtra +1 -1
- data/bin/nginxtra_rails +1 -1
- data/lib/nginxtra/version.rb +1 -1
- data/vendor/nginx/CHANGES +25 -1
- data/vendor/nginx/CHANGES.ru +24 -0
- data/vendor/nginx/LICENSE +3 -2
- data/vendor/nginx/auto/cc/clang +98 -0
- data/vendor/nginx/auto/cc/conf +6 -0
- data/vendor/nginx/auto/cc/gcc +1 -3
- data/vendor/nginx/auto/cc/name +14 -26
- data/vendor/nginx/auto/install +1 -1
- data/vendor/nginx/auto/lib/libatomic/make +1 -1
- data/vendor/nginx/auto/lib/perl/make +1 -1
- data/vendor/nginx/configure +3 -0
- data/vendor/nginx/src/core/nginx.h +2 -2
- data/vendor/nginx/src/core/ngx_conf_file.c +18 -21
- data/vendor/nginx/src/core/ngx_conf_file.h +1 -1
- data/vendor/nginx/src/core/ngx_crypt.c +1 -0
- data/vendor/nginx/src/core/ngx_shmtx.c +3 -3
- data/vendor/nginx/src/core/ngx_shmtx.h +1 -1
- data/vendor/nginx/src/core/ngx_slab.c +1 -5
- data/vendor/nginx/src/event/modules/ngx_epoll_module.c +9 -5
- data/vendor/nginx/src/event/modules/ngx_eventport_module.c +31 -0
- data/vendor/nginx/src/event/modules/ngx_rtsig_module.c +12 -0
- data/vendor/nginx/src/event/ngx_event.c +67 -26
- data/vendor/nginx/src/http/modules/ngx_http_limit_conn_module.c +2 -2
- data/vendor/nginx/src/http/modules/ngx_http_log_module.c +1 -1
- data/vendor/nginx/src/http/modules/ngx_http_map_module.c +4 -5
- data/vendor/nginx/src/http/modules/ngx_http_upstream_least_conn_module.c +1 -1
- data/vendor/nginx/src/http/modules/perl/nginx.pm +1 -1
- data/vendor/nginx/src/http/ngx_http.c +5 -0
- data/vendor/nginx/src/http/ngx_http_core_module.c +2 -1
- data/vendor/nginx/src/http/ngx_http_parse_time.c +1 -0
- data/vendor/nginx/src/http/ngx_http_request.c +5 -8
- data/vendor/nginx/src/http/ngx_http_upstream.c +6 -6
- data/vendor/nginx/src/mail/ngx_mail_parse.c +3 -0
- data/vendor/nginx/src/misc/ngx_cpp_test_module.cpp +2 -0
- data/vendor/nginx/src/os/unix/ngx_atomic.h +2 -0
- data/vendor/nginx/src/os/unix/ngx_files.c +3 -9
- data/vendor/nginx/src/os/unix/ngx_posix_init.c +4 -0
- data/vendor/nginx/src/os/unix/ngx_solaris_sendfilev_chain.c +3 -0
- metadata +4 -3
data/bin/nginxtra
CHANGED
data/bin/nginxtra_rails
CHANGED
data/lib/nginxtra/version.rb
CHANGED
data/vendor/nginx/CHANGES
CHANGED
@@ -1,4 +1,28 @@
|
|
1
1
|
|
2
|
+
Changes with nginx 1.2.3 07 Aug 2012
|
3
|
+
|
4
|
+
*) Feature: the Clang compiler support.
|
5
|
+
|
6
|
+
*) Bugfix: extra listening sockets might be created.
|
7
|
+
Thanks to Roman Odaisky.
|
8
|
+
|
9
|
+
*) Bugfix: nginx/Windows might hog CPU if a worker process failed to
|
10
|
+
start.
|
11
|
+
Thanks to Ricardo Villalobos Guevara.
|
12
|
+
|
13
|
+
*) Bugfix: the "proxy_pass_header", "fastcgi_pass_header",
|
14
|
+
"scgi_pass_header", "uwsgi_pass_header", "proxy_hide_header",
|
15
|
+
"fastcgi_hide_header", "scgi_hide_header", and "uwsgi_hide_header"
|
16
|
+
directives might be inherited incorrectly.
|
17
|
+
|
18
|
+
*) Bugfix: trailing dot in a source value was not ignored if the "map"
|
19
|
+
directive was used with the "hostnames" parameter.
|
20
|
+
|
21
|
+
*) Bugfix: incorrect location might be used to process a request if a
|
22
|
+
URI was changed via a "rewrite" directive before an internal redirect
|
23
|
+
to a named location.
|
24
|
+
|
25
|
+
|
2
26
|
Changes with nginx 1.2.2 03 Jul 2012
|
3
27
|
|
4
28
|
*) Change: the "single" parameter of the "keepalive" directive is now
|
@@ -11,7 +35,7 @@ Changes with nginx 1.2.2 03 Jul 2012
|
|
11
35
|
directives, and the "server" directive inside the "upstream" block,
|
12
36
|
now support IPv6 addresses.
|
13
37
|
|
14
|
-
*) Feature: the "resolver" directive now
|
38
|
+
*) Feature: the "resolver" directive now supports IPv6 addresses and an
|
15
39
|
optional port specification.
|
16
40
|
|
17
41
|
*) Feature: the "least_conn" directive inside the "upstream" block.
|
data/vendor/nginx/CHANGES.ru
CHANGED
@@ -1,4 +1,28 @@
|
|
1
1
|
|
2
|
+
Изменения в nginx 1.2.3 07.08.2012
|
3
|
+
|
4
|
+
*) Добавление: поддержка компилятора Clang.
|
5
|
+
|
6
|
+
*) Исправление: могли создаваться лишние слушающие сокеты.
|
7
|
+
Спасибо Роману Одайскому.
|
8
|
+
|
9
|
+
*) Исправление: nginx/Windows мог нагружать процессор, если при запуске
|
10
|
+
рабочего процесса происходила ошибка.
|
11
|
+
Спасибо Ricardo Villalobos Guevara.
|
12
|
+
|
13
|
+
*) Исправление: директивы proxy_pass_header, fastcgi_pass_header,
|
14
|
+
scgi_pass_header, uwsgi_pass_header, proxy_hide_header,
|
15
|
+
fastcgi_hide_header, scgi_hide_header и uwsgi_hide_header могли
|
16
|
+
наследоваться некорректно.
|
17
|
+
|
18
|
+
*) Исправление: при использовании директивы map с параметром hostnames
|
19
|
+
не игнорировалась конечная точка в исходном значении.
|
20
|
+
|
21
|
+
*) Исправление: для обработки запроса мог использоваться неверный
|
22
|
+
location, если переход в именованный location происходил после
|
23
|
+
изменения URI с помощью директивы rewrite.
|
24
|
+
|
25
|
+
|
2
26
|
Изменения в nginx 1.2.2 03.07.2012
|
3
27
|
|
4
28
|
*) Изменение: параметр single директивы keepalive теперь игнорируется.
|
data/vendor/nginx/LICENSE
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
* Copyright (C) 2002-2012 Igor Sysoev
|
3
3
|
* Copyright (C) 2011,2012 Nginx, Inc.
|
4
|
+
* All rights reserved.
|
4
5
|
*
|
5
6
|
* Redistribution and use in source and binary forms, with or without
|
6
7
|
* modification, are permitted provided that the following conditions
|
@@ -11,10 +12,10 @@
|
|
11
12
|
* notice, this list of conditions and the following disclaimer in the
|
12
13
|
* documentation and/or other materials provided with the distribution.
|
13
14
|
*
|
14
|
-
* THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
15
|
+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
15
16
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
16
17
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
17
|
-
* ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
|
18
|
+
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
18
19
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
19
20
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
20
21
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
@@ -0,0 +1,98 @@
|
|
1
|
+
|
2
|
+
# Copyright (C) Nginx, Inc.
|
3
|
+
|
4
|
+
|
5
|
+
# clang
|
6
|
+
|
7
|
+
|
8
|
+
NGX_CLANG_VER=`$CC -v 2>&1 | grep 'clang version' 2>&1 \
|
9
|
+
| sed -e 's/^.*clang version \(.*\)/\1/'`
|
10
|
+
|
11
|
+
echo " + clang version: $NGX_CLANG_VER"
|
12
|
+
|
13
|
+
have=NGX_COMPILER value="\"clang $NGX_CLANG_VER\"" . auto/define
|
14
|
+
|
15
|
+
|
16
|
+
CC_TEST_FLAGS="-pipe"
|
17
|
+
|
18
|
+
|
19
|
+
# optimizations
|
20
|
+
|
21
|
+
#NGX_CLANG_OPT="-O2"
|
22
|
+
#NGX_CLANG_OPT="-Oz"
|
23
|
+
NGX_CLANG_OPT="-O"
|
24
|
+
|
25
|
+
case $CPU in
|
26
|
+
pentium)
|
27
|
+
# optimize for Pentium
|
28
|
+
CPU_OPT="-march=pentium"
|
29
|
+
NGX_CPU_CACHE_LINE=32
|
30
|
+
;;
|
31
|
+
|
32
|
+
pentiumpro | pentium3)
|
33
|
+
# optimize for Pentium Pro, Pentium II and Pentium III
|
34
|
+
CPU_OPT="-march=pentiumpro"
|
35
|
+
NGX_CPU_CACHE_LINE=32
|
36
|
+
;;
|
37
|
+
|
38
|
+
pentium4)
|
39
|
+
# optimize for Pentium 4
|
40
|
+
CPU_OPT="-march=pentium4"
|
41
|
+
NGX_CPU_CACHE_LINE=128
|
42
|
+
;;
|
43
|
+
|
44
|
+
athlon)
|
45
|
+
# optimize for Athlon
|
46
|
+
CPU_OPT="-march=athlon"
|
47
|
+
NGX_CPU_CACHE_LINE=64
|
48
|
+
;;
|
49
|
+
|
50
|
+
opteron)
|
51
|
+
# optimize for Opteron
|
52
|
+
CPU_OPT="-march=opteron"
|
53
|
+
NGX_CPU_CACHE_LINE=64
|
54
|
+
;;
|
55
|
+
|
56
|
+
esac
|
57
|
+
|
58
|
+
CC_AUX_FLAGS="$CC_AUX_FLAGS $CPU_OPT"
|
59
|
+
|
60
|
+
|
61
|
+
CFLAGS="$CFLAGS -pipe $CPU_OPT"
|
62
|
+
|
63
|
+
if [ ".$PCRE_OPT" = "." ]; then
|
64
|
+
PCRE_OPT="-O2 -pipe $CPU_OPT"
|
65
|
+
else
|
66
|
+
PCRE_OPT="$PCRE_OPT -pipe"
|
67
|
+
fi
|
68
|
+
|
69
|
+
if [ ".$MD5_OPT" = "." ]; then
|
70
|
+
MD5_OPT="-O2 -pipe $CPU_OPT"
|
71
|
+
else
|
72
|
+
MD5_OPT="$MD5_OPT -pipe"
|
73
|
+
fi
|
74
|
+
|
75
|
+
if [ ".$ZLIB_OPT" = "." ]; then
|
76
|
+
ZLIB_OPT="-O2 -pipe $CPU_OPT"
|
77
|
+
else
|
78
|
+
ZLIB_OPT="$ZLIB_OPT -pipe"
|
79
|
+
fi
|
80
|
+
|
81
|
+
|
82
|
+
# warnings
|
83
|
+
|
84
|
+
CFLAGS="$CFLAGS $NGX_CLANG_OPT -Wall -Wextra -Wpointer-arith"
|
85
|
+
#CFLAGS="$CFLAGS -Wmissing-prototypes"
|
86
|
+
|
87
|
+
# we have a lot of unused function arguments
|
88
|
+
CFLAGS="$CFLAGS -Wno-unused-parameter"
|
89
|
+
|
90
|
+
# stop on warning
|
91
|
+
#CFLAGS="$CFLAGS -Werror"
|
92
|
+
|
93
|
+
# debug
|
94
|
+
CFLAGS="$CFLAGS -g"
|
95
|
+
|
96
|
+
if [ ".$CPP" = "." ]; then
|
97
|
+
CPP="$CC -E"
|
98
|
+
fi
|
data/vendor/nginx/auto/cc/conf
CHANGED
data/vendor/nginx/auto/cc/gcc
CHANGED
@@ -149,15 +149,13 @@ CFLAGS="$CFLAGS ${NGX_GCC_OPT:--O} -W"
|
|
149
149
|
CFLAGS="$CFLAGS -Wall -Wpointer-arith"
|
150
150
|
#CFLAGS="$CFLAGS -Wconversion"
|
151
151
|
#CFLAGS="$CFLAGS -Winline"
|
152
|
+
#CFLAGS="$CFLAGS -Wmissing-prototypes"
|
152
153
|
|
153
154
|
|
154
155
|
case "$NGX_GCC_VER" in
|
155
156
|
3.* | 4.* )
|
156
157
|
# we have a lot of the unused function arguments
|
157
158
|
CFLAGS="$CFLAGS -Wno-unused-parameter"
|
158
|
-
CFLAGS="$CFLAGS -Wunused-function"
|
159
|
-
CFLAGS="$CFLAGS -Wunused-variable"
|
160
|
-
CFLAGS="$CFLAGS -Wunused-value"
|
161
159
|
# 4.2.1 shows the warning in wrong places
|
162
160
|
#CFLAGS="$CFLAGS -Wunreachable-code"
|
163
161
|
;;
|
data/vendor/nginx/auto/cc/name
CHANGED
@@ -32,14 +32,14 @@ if [ "$CC" = cl ]; then
|
|
32
32
|
NGX_CC_NAME=msvc10
|
33
33
|
echo " + using Microsoft Visual C++ 10 compiler"
|
34
34
|
|
35
|
-
|
35
|
+
elif `$NGX_WINE $CC -v 2>&1 \
|
36
36
|
| grep '^Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14' \
|
37
37
|
>/dev/null 2>&1`; then
|
38
38
|
|
39
39
|
NGX_CC_NAME=msvc8
|
40
40
|
echo " + using Microsoft Visual C++ 8 compiler"
|
41
41
|
|
42
|
-
|
42
|
+
elif `$NGX_WINE $CC -v 2>&1 \
|
43
43
|
| grep '^Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13' \
|
44
44
|
>/dev/null 2>&1`; then
|
45
45
|
|
@@ -50,52 +50,40 @@ if [ "$CC" = cl ]; then
|
|
50
50
|
NGX_CC_NAME=msvc
|
51
51
|
echo " + using Microsoft Visual C++ compiler"
|
52
52
|
fi
|
53
|
-
fi
|
54
|
-
fi
|
55
53
|
|
56
|
-
|
57
|
-
if [ "$CC" = wcl386 ]; then
|
54
|
+
elif [ "$CC" = wcl386 ]; then
|
58
55
|
NGX_CC_NAME=owc
|
59
56
|
echo " + using Open Watcom C compiler"
|
60
57
|
|
61
|
-
|
62
|
-
if [ "$CC" = bcc32 ]; then
|
58
|
+
elif [ "$CC" = bcc32 ]; then
|
63
59
|
NGX_CC_NAME=bcc
|
64
60
|
echo " + using Borland C++ compiler"
|
65
61
|
|
66
|
-
|
67
|
-
if `$CC -V 2>&1 | grep '^Intel(R) C' >/dev/null 2>&1`; then
|
62
|
+
elif `$CC -V 2>&1 | grep '^Intel(R) C' >/dev/null 2>&1`; then
|
68
63
|
NGX_CC_NAME=icc
|
69
64
|
echo " + using Intel C++ compiler"
|
70
65
|
|
71
|
-
|
72
|
-
if `$CC -v 2>&1 | grep 'gcc version' >/dev/null 2>&1`; then
|
66
|
+
elif `$CC -v 2>&1 | grep 'gcc version' >/dev/null 2>&1`; then
|
73
67
|
NGX_CC_NAME=gcc
|
74
68
|
echo " + using GNU C compiler"
|
75
69
|
|
76
|
-
|
77
|
-
|
70
|
+
elif `$CC -v 2>&1 | grep 'clang version' >/dev/null 2>&1`; then
|
71
|
+
NGX_CC_NAME=clang
|
72
|
+
echo " + using Clang C compiler"
|
73
|
+
|
74
|
+
elif `$CC -V 2>&1 | grep 'Sun C' >/dev/null 2>&1`; then
|
78
75
|
NGX_CC_NAME=sunc
|
79
76
|
echo " + using Sun C compiler"
|
80
77
|
|
81
|
-
|
82
|
-
if `$CC -V 2>&1 | grep '^Compaq C' >/dev/null 2>&1`; then
|
78
|
+
elif `$CC -V 2>&1 | grep '^Compaq C' >/dev/null 2>&1`; then
|
83
79
|
NGX_CC_NAME=ccc
|
84
80
|
echo " + using Compaq C compiler"
|
85
81
|
|
86
|
-
|
87
|
-
if `$CC -V 2>&1 | grep '^aCC: ' >/dev/null 2>&1`; then
|
82
|
+
elif `$CC -V 2>&1 | grep '^aCC: ' >/dev/null 2>&1`; then
|
88
83
|
NGX_CC_NAME=acc
|
89
84
|
echo " + using HP aC++ compiler"
|
90
85
|
|
91
86
|
else
|
92
87
|
NGX_CC_NAME=unknown
|
93
88
|
|
94
|
-
fi
|
95
|
-
fi # ccc
|
96
|
-
fi # sunc
|
97
|
-
fi # icc
|
98
|
-
fi # gcc
|
99
|
-
fi # bcc
|
100
|
-
fi # owc
|
101
|
-
fi # msvc
|
89
|
+
fi
|
data/vendor/nginx/auto/install
CHANGED
@@ -12,7 +12,7 @@ $NGX_OBJS/src/http/modules/perl/blib/arch/auto/nginx/nginx.so: \
|
|
12
12
|
$NGX_OBJS/src/http/modules/perl/Makefile
|
13
13
|
cp -p src/http/modules/perl/nginx.* $NGX_OBJS/src/http/modules/perl/
|
14
14
|
|
15
|
-
cd $NGX_OBJS/src/http/modules/perl &&
|
15
|
+
cd $NGX_OBJS/src/http/modules/perl && \${MAKE}
|
16
16
|
|
17
17
|
rm -rf $NGX_OBJS/install_perl
|
18
18
|
|
data/vendor/nginx/configure
CHANGED
@@ -282,24 +282,16 @@ ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last)
|
|
282
282
|
{
|
283
283
|
char *rv;
|
284
284
|
void *conf, **confp;
|
285
|
-
ngx_uint_t i,
|
285
|
+
ngx_uint_t i, found;
|
286
286
|
ngx_str_t *name;
|
287
287
|
ngx_command_t *cmd;
|
288
288
|
|
289
289
|
name = cf->args->elts;
|
290
290
|
|
291
|
-
|
291
|
+
found = 0;
|
292
292
|
|
293
293
|
for (i = 0; ngx_modules[i]; i++) {
|
294
294
|
|
295
|
-
/* look up the directive in the appropriate modules */
|
296
|
-
|
297
|
-
if (ngx_modules[i]->type != NGX_CONF_MODULE
|
298
|
-
&& ngx_modules[i]->type != cf->module_type)
|
299
|
-
{
|
300
|
-
continue;
|
301
|
-
}
|
302
|
-
|
303
295
|
cmd = ngx_modules[i]->commands;
|
304
296
|
if (cmd == NULL) {
|
305
297
|
continue;
|
@@ -315,16 +307,18 @@ ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last)
|
|
315
307
|
continue;
|
316
308
|
}
|
317
309
|
|
310
|
+
found = 1;
|
311
|
+
|
312
|
+
if (ngx_modules[i]->type != NGX_CONF_MODULE
|
313
|
+
&& ngx_modules[i]->type != cf->module_type)
|
314
|
+
{
|
315
|
+
continue;
|
316
|
+
}
|
318
317
|
|
319
318
|
/* is the directive's location right ? */
|
320
319
|
|
321
320
|
if (!(cmd->type & cf->cmd_type)) {
|
322
|
-
|
323
|
-
multi = 1;
|
324
|
-
continue;
|
325
|
-
}
|
326
|
-
|
327
|
-
goto not_allowed;
|
321
|
+
continue;
|
328
322
|
}
|
329
323
|
|
330
324
|
if (!(cmd->type & NGX_CONF_BLOCK) && last != NGX_OK) {
|
@@ -408,17 +402,16 @@ ngx_conf_handler(ngx_conf_t *cf, ngx_int_t last)
|
|
408
402
|
}
|
409
403
|
}
|
410
404
|
|
411
|
-
if (
|
405
|
+
if (found) {
|
412
406
|
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
413
|
-
"
|
407
|
+
"\"%s\" directive is not allowed here", name->data);
|
414
408
|
|
415
409
|
return NGX_ERROR;
|
416
410
|
}
|
417
411
|
|
418
|
-
not_allowed:
|
419
|
-
|
420
412
|
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
421
|
-
"\"%s\"
|
413
|
+
"unknown directive \"%s\"", name->data);
|
414
|
+
|
422
415
|
return NGX_ERROR;
|
423
416
|
|
424
417
|
invalid:
|
@@ -1448,12 +1441,16 @@ ngx_conf_set_bitmask_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|
1448
1441
|
}
|
1449
1442
|
|
1450
1443
|
|
1444
|
+
#if 0
|
1445
|
+
|
1451
1446
|
char *
|
1452
1447
|
ngx_conf_unsupported(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
1453
1448
|
{
|
1454
1449
|
return "unsupported on this platform";
|
1455
1450
|
}
|
1456
1451
|
|
1452
|
+
#endif
|
1453
|
+
|
1457
1454
|
|
1458
1455
|
char *
|
1459
1456
|
ngx_conf_deprecated(ngx_conf_t *cf, void *post, void *data)
|
@@ -44,7 +44,7 @@ ngx_shmtx_create(ngx_shmtx_t *mtx, ngx_shmtx_sh_t *addr, u_char *name)
|
|
44
44
|
|
45
45
|
|
46
46
|
void
|
47
|
-
|
47
|
+
ngx_shmtx_destroy(ngx_shmtx_t *mtx)
|
48
48
|
{
|
49
49
|
#if (NGX_HAVE_POSIX_SEM)
|
50
50
|
|
@@ -208,7 +208,7 @@ ngx_shmtx_create(ngx_shmtx_t *mtx, ngx_shmtx_sh_t *addr, u_char *name)
|
|
208
208
|
return NGX_OK;
|
209
209
|
}
|
210
210
|
|
211
|
-
|
211
|
+
ngx_shmtx_destroy(mtx);
|
212
212
|
}
|
213
213
|
|
214
214
|
mtx->fd = ngx_open_file(name, NGX_FILE_RDWR, NGX_FILE_CREATE_OR_OPEN,
|
@@ -232,7 +232,7 @@ ngx_shmtx_create(ngx_shmtx_t *mtx, ngx_shmtx_sh_t *addr, u_char *name)
|
|
232
232
|
|
233
233
|
|
234
234
|
void
|
235
|
-
|
235
|
+
ngx_shmtx_destroy(ngx_shmtx_t *mtx)
|
236
236
|
{
|
237
237
|
if (ngx_close_file(mtx->fd) == NGX_FILE_ERROR) {
|
238
238
|
ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_errno,
|
@@ -39,7 +39,7 @@ typedef struct {
|
|
39
39
|
|
40
40
|
ngx_int_t ngx_shmtx_create(ngx_shmtx_t *mtx, ngx_shmtx_sh_t *addr,
|
41
41
|
u_char *name);
|
42
|
-
void
|
42
|
+
void ngx_shmtx_destroy(ngx_shmtx_t *mtx);
|
43
43
|
ngx_uint_t ngx_shmtx_trylock(ngx_shmtx_t *mtx);
|
44
44
|
void ngx_shmtx_lock(ngx_shmtx_t *mtx);
|
45
45
|
void ngx_shmtx_unlock(ngx_shmtx_t *mtx);
|
@@ -45,9 +45,7 @@
|
|
45
45
|
|
46
46
|
#define ngx_slab_junk(p, size) ngx_memset(p, 0xA5, size)
|
47
47
|
|
48
|
-
#
|
49
|
-
|
50
|
-
#if (NGX_HAVE_DEBUG_MALLOC)
|
48
|
+
#elif (NGX_HAVE_DEBUG_MALLOC)
|
51
49
|
|
52
50
|
#define ngx_slab_junk(p, size) \
|
53
51
|
if (ngx_debug_malloc) ngx_memset(p, 0xA5, size)
|
@@ -58,8 +56,6 @@
|
|
58
56
|
|
59
57
|
#endif
|
60
58
|
|
61
|
-
#endif
|
62
|
-
|
63
59
|
static ngx_slab_page_t *ngx_slab_alloc_pages(ngx_slab_pool_t *pool,
|
64
60
|
ngx_uint_t pages);
|
65
61
|
static void ngx_slab_free_pages(ngx_slab_pool_t *pool, ngx_slab_page_t *page,
|
@@ -44,16 +44,25 @@ struct epoll_event {
|
|
44
44
|
epoll_data_t data;
|
45
45
|
};
|
46
46
|
|
47
|
+
|
48
|
+
int epoll_create(int size);
|
49
|
+
|
47
50
|
int epoll_create(int size)
|
48
51
|
{
|
49
52
|
return -1;
|
50
53
|
}
|
51
54
|
|
55
|
+
|
56
|
+
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
|
57
|
+
|
52
58
|
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event)
|
53
59
|
{
|
54
60
|
return -1;
|
55
61
|
}
|
56
62
|
|
63
|
+
|
64
|
+
int epoll_wait(int epfd, struct epoll_event *events, int nevents, int timeout);
|
65
|
+
|
57
66
|
int epoll_wait(int epfd, struct epoll_event *events, int nevents, int timeout)
|
58
67
|
{
|
59
68
|
return -1;
|
@@ -76,11 +85,6 @@ struct io_event {
|
|
76
85
|
};
|
77
86
|
|
78
87
|
|
79
|
-
int eventfd(u_int initval)
|
80
|
-
{
|
81
|
-
return -1;
|
82
|
-
}
|
83
|
-
|
84
88
|
#endif
|
85
89
|
#endif
|
86
90
|
|
@@ -15,6 +15,12 @@
|
|
15
15
|
#define ushort_t u_short
|
16
16
|
#define uint_t u_int
|
17
17
|
|
18
|
+
#ifndef CLOCK_REALTIME
|
19
|
+
#define CLOCK_REALTIME 0
|
20
|
+
typedef int clockid_t;
|
21
|
+
typedef void * timer_t;
|
22
|
+
#endif
|
23
|
+
|
18
24
|
/* Solaris declarations */
|
19
25
|
|
20
26
|
#define PORT_SOURCE_AIO 1
|
@@ -24,7 +30,9 @@
|
|
24
30
|
#define PORT_SOURCE_ALERT 5
|
25
31
|
#define PORT_SOURCE_MQ 6
|
26
32
|
|
33
|
+
#ifndef ETIME
|
27
34
|
#define ETIME 64
|
35
|
+
#endif
|
28
36
|
|
29
37
|
#define SIGEV_PORT 4
|
30
38
|
|
@@ -50,39 +58,62 @@ typedef struct itimerspec { /* definition per POSIX.4 */
|
|
50
58
|
|
51
59
|
#endif
|
52
60
|
|
61
|
+
int port_create(void);
|
62
|
+
|
53
63
|
int port_create(void)
|
54
64
|
{
|
55
65
|
return -1;
|
56
66
|
}
|
57
67
|
|
68
|
+
|
69
|
+
int port_associate(int port, int source, uintptr_t object, int events,
|
70
|
+
void *user);
|
71
|
+
|
58
72
|
int port_associate(int port, int source, uintptr_t object, int events,
|
59
73
|
void *user)
|
60
74
|
{
|
61
75
|
return -1;
|
62
76
|
}
|
63
77
|
|
78
|
+
|
79
|
+
int port_dissociate(int port, int source, uintptr_t object);
|
80
|
+
|
64
81
|
int port_dissociate(int port, int source, uintptr_t object)
|
65
82
|
{
|
66
83
|
return -1;
|
67
84
|
}
|
68
85
|
|
86
|
+
|
87
|
+
int port_getn(int port, port_event_t list[], uint_t max, uint_t *nget,
|
88
|
+
struct timespec *timeout);
|
89
|
+
|
69
90
|
int port_getn(int port, port_event_t list[], uint_t max, uint_t *nget,
|
70
91
|
struct timespec *timeout)
|
71
92
|
{
|
72
93
|
return -1;
|
73
94
|
}
|
74
95
|
|
96
|
+
|
97
|
+
int timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid);
|
98
|
+
|
75
99
|
int timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid)
|
76
100
|
{
|
77
101
|
return -1;
|
78
102
|
}
|
79
103
|
|
104
|
+
|
105
|
+
int timer_settime(timer_t timerid, int flags, const struct itimerspec *value,
|
106
|
+
struct itimerspec *ovalue);
|
107
|
+
|
80
108
|
int timer_settime(timer_t timerid, int flags, const struct itimerspec *value,
|
81
109
|
struct itimerspec *ovalue)
|
82
110
|
{
|
83
111
|
return -1;
|
84
112
|
}
|
85
113
|
|
114
|
+
|
115
|
+
int timer_delete(timer_t timerid);
|
116
|
+
|
86
117
|
int timer_delete(timer_t timerid)
|
87
118
|
{
|
88
119
|
return -1;
|
@@ -12,6 +12,13 @@
|
|
12
12
|
|
13
13
|
#if (NGX_TEST_BUILD_RTSIG)
|
14
14
|
|
15
|
+
#if (NGX_DARWIN)
|
16
|
+
|
17
|
+
#define SIGRTMIN 33
|
18
|
+
#define si_fd __pad[0]
|
19
|
+
|
20
|
+
#else
|
21
|
+
|
15
22
|
#ifdef SIGRTMIN
|
16
23
|
#define si_fd _reason.__spare__.__spare2__[0]
|
17
24
|
#else
|
@@ -19,10 +26,15 @@
|
|
19
26
|
#define si_fd __spare__[0]
|
20
27
|
#endif
|
21
28
|
|
29
|
+
#endif
|
30
|
+
|
22
31
|
#define F_SETSIG 10
|
23
32
|
#define KERN_RTSIGNR 30
|
24
33
|
#define KERN_RTSIGMAX 31
|
25
34
|
|
35
|
+
int sigtimedwait(const sigset_t *set, siginfo_t *info,
|
36
|
+
const struct timespec *timeout);
|
37
|
+
|
26
38
|
int sigtimedwait(const sigset_t *set, siginfo_t *info,
|
27
39
|
const struct timespec *timeout)
|
28
40
|
{
|
@@ -567,7 +567,7 @@ ngx_event_module_init(ngx_cycle_t *cycle)
|
|
567
567
|
|
568
568
|
#if !(NGX_WIN32)
|
569
569
|
|
570
|
-
void
|
570
|
+
static void
|
571
571
|
ngx_timer_signal_handler(int signo)
|
572
572
|
{
|
573
573
|
ngx_event_timer_alarm = 1;
|
@@ -1062,50 +1062,91 @@ ngx_event_debug_connection(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|
1062
1062
|
#if (NGX_DEBUG)
|
1063
1063
|
ngx_event_conf_t *ecf = conf;
|
1064
1064
|
|
1065
|
-
ngx_int_t
|
1066
|
-
ngx_str_t
|
1067
|
-
|
1068
|
-
ngx_cidr_t
|
1065
|
+
ngx_int_t rc;
|
1066
|
+
ngx_str_t *value;
|
1067
|
+
ngx_url_t u;
|
1068
|
+
ngx_cidr_t c, *cidr;
|
1069
|
+
ngx_uint_t i;
|
1070
|
+
struct sockaddr_in *sin;
|
1071
|
+
#if (NGX_HAVE_INET6)
|
1072
|
+
struct sockaddr_in6 *sin6;
|
1073
|
+
#endif
|
1069
1074
|
|
1070
1075
|
value = cf->args->elts;
|
1071
1076
|
|
1072
|
-
cidr = ngx_array_push(&ecf->debug_connection);
|
1073
|
-
if (cidr == NULL) {
|
1074
|
-
return NGX_CONF_ERROR;
|
1075
|
-
}
|
1076
|
-
|
1077
1077
|
#if (NGX_HAVE_UNIX_DOMAIN)
|
1078
1078
|
|
1079
1079
|
if (ngx_strcmp(value[1].data, "unix:") == 0) {
|
1080
|
-
|
1081
|
-
|
1080
|
+
cidr = ngx_array_push(&ecf->debug_connection);
|
1081
|
+
if (cidr == NULL) {
|
1082
|
+
return NGX_CONF_ERROR;
|
1083
|
+
}
|
1084
|
+
|
1085
|
+
cidr->family = AF_UNIX;
|
1086
|
+
return NGX_CONF_OK;
|
1082
1087
|
}
|
1083
1088
|
|
1084
1089
|
#endif
|
1085
1090
|
|
1086
|
-
rc = ngx_ptocidr(&value[1],
|
1091
|
+
rc = ngx_ptocidr(&value[1], &c);
|
1087
1092
|
|
1088
|
-
if (rc
|
1089
|
-
|
1090
|
-
|
1091
|
-
|
1092
|
-
|
1093
|
+
if (rc != NGX_ERROR) {
|
1094
|
+
if (rc == NGX_DONE) {
|
1095
|
+
ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
|
1096
|
+
"low address bits of %V are meaningless",
|
1097
|
+
&value[1]);
|
1098
|
+
}
|
1099
|
+
|
1100
|
+
cidr = ngx_array_push(&ecf->debug_connection);
|
1101
|
+
if (cidr == NULL) {
|
1102
|
+
return NGX_CONF_ERROR;
|
1103
|
+
}
|
1104
|
+
|
1105
|
+
*cidr = c;
|
1093
1106
|
|
1094
|
-
if (rc == NGX_OK) {
|
1095
1107
|
return NGX_CONF_OK;
|
1096
1108
|
}
|
1097
1109
|
|
1098
|
-
|
1110
|
+
ngx_memzero(&u, sizeof(ngx_url_t));
|
1111
|
+
u.host = value[1];
|
1112
|
+
|
1113
|
+
if (ngx_inet_resolve_host(cf->pool, &u) != NGX_OK) {
|
1114
|
+
if (u.err) {
|
1115
|
+
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
1116
|
+
"%s in debug_connection \"%V\"",
|
1117
|
+
u.err, &u.host);
|
1118
|
+
}
|
1099
1119
|
|
1100
|
-
if (h == NULL || h->h_addr_list[0] == NULL) {
|
1101
|
-
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
1102
|
-
"host \"%s\" not found", value[1].data);
|
1103
1120
|
return NGX_CONF_ERROR;
|
1104
1121
|
}
|
1105
1122
|
|
1106
|
-
cidr
|
1107
|
-
cidr
|
1108
|
-
|
1123
|
+
cidr = ngx_array_push_n(&ecf->debug_connection, u.naddrs);
|
1124
|
+
if (cidr == NULL) {
|
1125
|
+
return NGX_CONF_ERROR;
|
1126
|
+
}
|
1127
|
+
|
1128
|
+
ngx_memzero(cidr, u.naddrs * sizeof(ngx_cidr_t));
|
1129
|
+
|
1130
|
+
for (i = 0; i < u.naddrs; i++) {
|
1131
|
+
cidr[i].family = u.addrs[i].sockaddr->sa_family;
|
1132
|
+
|
1133
|
+
switch (cidr[i].family) {
|
1134
|
+
|
1135
|
+
#if (NGX_HAVE_INET6)
|
1136
|
+
case AF_INET6:
|
1137
|
+
sin6 = (struct sockaddr_in6 *) u.addrs[i].sockaddr;
|
1138
|
+
cidr[i].u.in6.addr = sin6->sin6_addr;
|
1139
|
+
ngx_memset(cidr[i].u.in6.mask.s6_addr, 0xff, 16);
|
1140
|
+
break;
|
1141
|
+
#endif
|
1142
|
+
|
1143
|
+
default: /* AF_INET */
|
1144
|
+
sin = (struct sockaddr_in *) u.addrs[i].sockaddr;
|
1145
|
+
cidr[i].u.in.addr = sin->sin_addr.s_addr;
|
1146
|
+
cidr[i].u.in.mask = 0xffffffff;
|
1147
|
+
break;
|
1148
|
+
}
|
1149
|
+
}
|
1109
1150
|
|
1110
1151
|
#else
|
1111
1152
|
|
@@ -238,7 +238,7 @@ ngx_http_limit_conn_handler(ngx_http_request_t *r)
|
|
238
238
|
}
|
239
239
|
|
240
240
|
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
241
|
-
"limit
|
241
|
+
"limit conn: %08XD %d", node->key, lc->conn);
|
242
242
|
|
243
243
|
ngx_shmtx_unlock(&shpool->mutex);
|
244
244
|
|
@@ -358,7 +358,7 @@ ngx_http_limit_conn_cleanup(void *data)
|
|
358
358
|
ngx_shmtx_lock(&shpool->mutex);
|
359
359
|
|
360
360
|
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, lccln->shm_zone->shm.log, 0,
|
361
|
-
"limit
|
361
|
+
"limit conn cleanup: %08XD %d", node->key, lc->conn);
|
362
362
|
|
363
363
|
lc->conn--;
|
364
364
|
|
@@ -110,7 +110,6 @@ ngx_http_map_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
|
|
110
110
|
{
|
111
111
|
ngx_http_map_ctx_t *map = (ngx_http_map_ctx_t *) data;
|
112
112
|
|
113
|
-
size_t len;
|
114
113
|
ngx_str_t val;
|
115
114
|
ngx_http_variable_value_t *value;
|
116
115
|
|
@@ -121,10 +120,8 @@ ngx_http_map_variable(ngx_http_request_t *r, ngx_http_variable_value_t *v,
|
|
121
120
|
return NGX_ERROR;
|
122
121
|
}
|
123
122
|
|
124
|
-
len
|
125
|
-
|
126
|
-
if (len && map->hostnames && val.data[len - 1] == '.') {
|
127
|
-
len--;
|
123
|
+
if (map->hostnames && val.len > 0 && val.data[val.len - 1] == '.') {
|
124
|
+
val.len--;
|
128
125
|
}
|
129
126
|
|
130
127
|
value = ngx_http_map_find(r, &map->map, &val);
|
@@ -281,6 +278,8 @@ ngx_http_map_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
|
281
278
|
map->default_value = ctx.default_value ? ctx.default_value:
|
282
279
|
&ngx_http_variable_null_value;
|
283
280
|
|
281
|
+
map->hostnames = ctx.hostnames;
|
282
|
+
|
284
283
|
hash.key = ngx_hash_key_lc;
|
285
284
|
hash.max_size = mcf->hash_max_size;
|
286
285
|
hash.bucket_size = mcf->hash_bucket_size;
|
@@ -1613,6 +1613,11 @@ ngx_http_cmp_conf_addrs(const void *one, const void *two)
|
|
1613
1613
|
return 1;
|
1614
1614
|
}
|
1615
1615
|
|
1616
|
+
if (second->opt.wildcard) {
|
1617
|
+
/* a wildcard address must be the last resort, shift it to the end */
|
1618
|
+
return -1;
|
1619
|
+
}
|
1620
|
+
|
1616
1621
|
if (first->opt.bind && !second->opt.bind) {
|
1617
1622
|
/* shift explicit bind()ed addresses to the start */
|
1618
1623
|
return -1;
|
@@ -222,7 +222,7 @@ static ngx_command_t ngx_http_core_commands[] = {
|
|
222
222
|
NULL },
|
223
223
|
|
224
224
|
{ ngx_string("server"),
|
225
|
-
NGX_HTTP_MAIN_CONF|NGX_CONF_BLOCK|
|
225
|
+
NGX_HTTP_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_NOARGS,
|
226
226
|
ngx_http_core_server,
|
227
227
|
0,
|
228
228
|
0,
|
@@ -2588,6 +2588,7 @@ ngx_http_named_location(ngx_http_request_t *r, ngx_str_t *name)
|
|
2588
2588
|
|
2589
2589
|
r->internal = 1;
|
2590
2590
|
r->content_handler = NULL;
|
2591
|
+
r->uri_changed = 0;
|
2591
2592
|
r->loc_conf = (*clcfp)->loc_conf;
|
2592
2593
|
|
2593
2594
|
/* clear the modules contexts */
|
@@ -747,6 +747,7 @@ ngx_http_process_request_line(ngx_event_t *rev)
|
|
747
747
|
|
748
748
|
r->request_line.len = r->request_end - r->request_start;
|
749
749
|
r->request_line.data = r->request_start;
|
750
|
+
r->request_length = r->header_in->pos - r->request_start;
|
750
751
|
|
751
752
|
|
752
753
|
if (r->args_start) {
|
@@ -1056,6 +1057,8 @@ ngx_http_process_request_headers(ngx_event_t *rev)
|
|
1056
1057
|
|
1057
1058
|
if (rc == NGX_OK) {
|
1058
1059
|
|
1060
|
+
r->request_length += r->header_in->pos - r->header_name_start;
|
1061
|
+
|
1059
1062
|
if (r->invalid_header && cscf->ignore_invalid_headers) {
|
1060
1063
|
|
1061
1064
|
/* there was error while a header line parsing */
|
@@ -1119,7 +1122,7 @@ ngx_http_process_request_headers(ngx_event_t *rev)
|
|
1119
1122
|
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
1120
1123
|
"http header done");
|
1121
1124
|
|
1122
|
-
r->request_length += r->header_in->pos - r->
|
1125
|
+
r->request_length += r->header_in->pos - r->header_name_start;
|
1123
1126
|
|
1124
1127
|
r->http_state = NGX_HTTP_PROCESS_REQUEST_STATE;
|
1125
1128
|
|
@@ -1226,8 +1229,6 @@ ngx_http_alloc_large_header_buffer(ngx_http_request_t *r,
|
|
1226
1229
|
|
1227
1230
|
/* the client fills up the buffer with "\r\n" */
|
1228
1231
|
|
1229
|
-
r->request_length += r->header_in->end - r->header_in->start;
|
1230
|
-
|
1231
1232
|
r->header_in->pos = r->header_in->start;
|
1232
1233
|
r->header_in->last = r->header_in->start;
|
1233
1234
|
|
@@ -1287,8 +1288,6 @@ ngx_http_alloc_large_header_buffer(ngx_http_request_t *r,
|
|
1287
1288
|
* to relocate the parser header pointers
|
1288
1289
|
*/
|
1289
1290
|
|
1290
|
-
r->request_length += r->header_in->end - r->header_in->start;
|
1291
|
-
|
1292
1291
|
r->header_in = b;
|
1293
1292
|
|
1294
1293
|
return NGX_OK;
|
@@ -1297,8 +1296,6 @@ ngx_http_alloc_large_header_buffer(ngx_http_request_t *r,
|
|
1297
1296
|
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
1298
1297
|
"http large header copy: %d", r->header_in->pos - old);
|
1299
1298
|
|
1300
|
-
r->request_length += old - r->header_in->start;
|
1301
|
-
|
1302
1299
|
new = b->start;
|
1303
1300
|
|
1304
1301
|
ngx_memcpy(new, old, r->header_in->pos - old);
|
@@ -1826,7 +1823,7 @@ ngx_http_find_virtual_server(ngx_http_request_t *r, u_char *host, size_t len)
|
|
1826
1823
|
|
1827
1824
|
#endif
|
1828
1825
|
|
1829
|
-
return
|
1826
|
+
return NGX_DECLINED;
|
1830
1827
|
|
1831
1828
|
found:
|
1832
1829
|
|
@@ -4422,18 +4422,18 @@ ngx_http_upstream_add(ngx_conf_t *cf, ngx_url_t *u, ngx_uint_t flags)
|
|
4422
4422
|
uscf->servers = ngx_array_create(cf->pool, 1,
|
4423
4423
|
sizeof(ngx_http_upstream_server_t));
|
4424
4424
|
if (uscf->servers == NULL) {
|
4425
|
-
return
|
4425
|
+
return NULL;
|
4426
4426
|
}
|
4427
4427
|
|
4428
4428
|
us = ngx_array_push(uscf->servers);
|
4429
4429
|
if (us == NULL) {
|
4430
|
-
return
|
4430
|
+
return NULL;
|
4431
4431
|
}
|
4432
4432
|
|
4433
4433
|
ngx_memzero(us, sizeof(ngx_http_upstream_server_t));
|
4434
4434
|
|
4435
4435
|
us->addrs = u->addrs;
|
4436
|
-
us->naddrs =
|
4436
|
+
us->naddrs = 1;
|
4437
4437
|
}
|
4438
4438
|
|
4439
4439
|
uscfp = ngx_array_push(&umcf->upstreams);
|
@@ -4541,6 +4541,9 @@ ngx_http_upstream_hide_headers_hash(ngx_conf_t *cf,
|
|
4541
4541
|
if (conf->hide_headers == NGX_CONF_UNSET_PTR
|
4542
4542
|
&& conf->pass_headers == NGX_CONF_UNSET_PTR)
|
4543
4543
|
{
|
4544
|
+
conf->hide_headers = prev->hide_headers;
|
4545
|
+
conf->pass_headers = prev->pass_headers;
|
4546
|
+
|
4544
4547
|
conf->hide_headers_hash = prev->hide_headers_hash;
|
4545
4548
|
|
4546
4549
|
if (conf->hide_headers_hash.buckets
|
@@ -4552,9 +4555,6 @@ ngx_http_upstream_hide_headers_hash(ngx_conf_t *cf,
|
|
4552
4555
|
return NGX_OK;
|
4553
4556
|
}
|
4554
4557
|
|
4555
|
-
conf->hide_headers = prev->hide_headers;
|
4556
|
-
conf->pass_headers = prev->pass_headers;
|
4557
|
-
|
4558
4558
|
} else {
|
4559
4559
|
if (conf->hide_headers == NGX_CONF_UNSET_PTR) {
|
4560
4560
|
conf->hide_headers = prev->hide_headers;
|
@@ -413,9 +413,7 @@ ngx_trylock_fd(ngx_fd_t fd)
|
|
413
413
|
{
|
414
414
|
struct flock fl;
|
415
415
|
|
416
|
-
fl
|
417
|
-
fl.l_len = 0;
|
418
|
-
fl.l_pid = 0;
|
416
|
+
ngx_memzero(&fl, sizeof(struct flock));
|
419
417
|
fl.l_type = F_WRLCK;
|
420
418
|
fl.l_whence = SEEK_SET;
|
421
419
|
|
@@ -432,9 +430,7 @@ ngx_lock_fd(ngx_fd_t fd)
|
|
432
430
|
{
|
433
431
|
struct flock fl;
|
434
432
|
|
435
|
-
fl
|
436
|
-
fl.l_len = 0;
|
437
|
-
fl.l_pid = 0;
|
433
|
+
ngx_memzero(&fl, sizeof(struct flock));
|
438
434
|
fl.l_type = F_WRLCK;
|
439
435
|
fl.l_whence = SEEK_SET;
|
440
436
|
|
@@ -451,9 +447,7 @@ ngx_unlock_fd(ngx_fd_t fd)
|
|
451
447
|
{
|
452
448
|
struct flock fl;
|
453
449
|
|
454
|
-
fl
|
455
|
-
fl.l_len = 0;
|
456
|
-
fl.l_pid = 0;
|
450
|
+
ngx_memzero(&fl, sizeof(struct flock));
|
457
451
|
fl.l_type = F_UNLCK;
|
458
452
|
fl.l_whence = SEEK_SET;
|
459
453
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nginxtra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.3.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-08-08 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
16
|
-
requirement: &
|
16
|
+
requirement: &10388680 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: 0.15.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *10388680
|
25
25
|
description: This gem is intended to provide an easy to use configuration file that
|
26
26
|
will automatically be used to compile nginx and configure the configuration.
|
27
27
|
email: reasonnumber@gmail.com
|
@@ -62,6 +62,7 @@ files:
|
|
62
62
|
- vendor/nginx/auto/cc/acc
|
63
63
|
- vendor/nginx/auto/cc/bcc
|
64
64
|
- vendor/nginx/auto/cc/ccc
|
65
|
+
- vendor/nginx/auto/cc/clang
|
65
66
|
- vendor/nginx/auto/cc/conf
|
66
67
|
- vendor/nginx/auto/cc/gcc
|
67
68
|
- vendor/nginx/auto/cc/icc
|