nginxtra 1.2.6.8 → 1.2.7.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. data/bin/nginxtra +1 -1
  2. data/bin/nginxtra_rails +1 -1
  3. data/lib/nginxtra/version.rb +1 -1
  4. data/vendor/nginx/CHANGES +72 -0
  5. data/vendor/nginx/CHANGES.ru +76 -0
  6. data/vendor/nginx/LICENSE +2 -2
  7. data/vendor/nginx/auto/cc/msvc +0 -3
  8. data/vendor/nginx/auto/lib/geoip/conf +17 -2
  9. data/vendor/nginx/auto/lib/libgd/conf +1 -1
  10. data/vendor/nginx/auto/lib/pcre/conf +1 -0
  11. data/vendor/nginx/auto/lib/perl/make +1 -3
  12. data/vendor/nginx/auto/lib/zlib/conf +4 -1
  13. data/vendor/nginx/man/nginx.8 +2 -2
  14. data/vendor/nginx/src/core/nginx.h +2 -2
  15. data/vendor/nginx/src/core/ngx_conf_file.c +4 -19
  16. data/vendor/nginx/src/core/ngx_conf_file.h +1 -10
  17. data/vendor/nginx/src/core/ngx_cycle.c +2 -19
  18. data/vendor/nginx/src/core/ngx_file.c +4 -4
  19. data/vendor/nginx/src/core/ngx_inet.c +1 -1
  20. data/vendor/nginx/src/core/ngx_inet.h +1 -1
  21. data/vendor/nginx/src/core/ngx_radix_tree.c +202 -5
  22. data/vendor/nginx/src/core/ngx_radix_tree.h +9 -0
  23. data/vendor/nginx/src/event/modules/ngx_poll_module.c +2 -2
  24. data/vendor/nginx/src/event/ngx_event.c +4 -0
  25. data/vendor/nginx/src/event/ngx_event_openssl.c +27 -13
  26. data/vendor/nginx/src/http/modules/ngx_http_auth_basic_module.c +38 -49
  27. data/vendor/nginx/src/http/modules/ngx_http_fastcgi_module.c +44 -59
  28. data/vendor/nginx/src/http/modules/ngx_http_geo_module.c +310 -103
  29. data/vendor/nginx/src/http/modules/ngx_http_geoip_module.c +145 -15
  30. data/vendor/nginx/src/http/modules/ngx_http_gzip_filter_module.c +5 -1
  31. data/vendor/nginx/src/http/modules/ngx_http_headers_filter_module.c +1 -0
  32. data/vendor/nginx/src/http/modules/ngx_http_image_filter_module.c +27 -13
  33. data/vendor/nginx/src/http/modules/ngx_http_log_module.c +378 -40
  34. data/vendor/nginx/src/http/modules/ngx_http_map_module.c +7 -0
  35. data/vendor/nginx/src/http/modules/ngx_http_proxy_module.c +9 -7
  36. data/vendor/nginx/src/http/modules/ngx_http_scgi_module.c +1 -1
  37. data/vendor/nginx/src/http/modules/ngx_http_secure_link_module.c +15 -2
  38. data/vendor/nginx/src/http/modules/ngx_http_split_clients_module.c +1 -1
  39. data/vendor/nginx/src/http/modules/ngx_http_sub_filter_module.c +2 -2
  40. data/vendor/nginx/src/http/modules/ngx_http_upstream_keepalive_module.c +4 -0
  41. data/vendor/nginx/src/http/modules/ngx_http_upstream_least_conn_module.c +3 -1
  42. data/vendor/nginx/src/http/modules/ngx_http_uwsgi_module.c +1 -1
  43. data/vendor/nginx/src/http/modules/ngx_http_xslt_filter_module.c +2 -2
  44. data/vendor/nginx/src/http/modules/perl/Makefile.PL +3 -14
  45. data/vendor/nginx/src/http/modules/perl/nginx.pm +2 -2
  46. data/vendor/nginx/src/http/ngx_http_core_module.c +2 -1
  47. data/vendor/nginx/src/http/ngx_http_script.c +3 -7
  48. data/vendor/nginx/src/http/ngx_http_upstream.c +9 -0
  49. data/vendor/nginx/src/http/ngx_http_upstream_round_robin.c +3 -1
  50. data/vendor/nginx/src/http/ngx_http_variables.c +114 -0
  51. data/vendor/nginx/src/http/ngx_http_write_filter_module.c +1 -1
  52. data/vendor/nginx/src/os/unix/ngx_files.c +1 -1
  53. data/vendor/nginx/src/os/unix/ngx_user.c +13 -14
  54. metadata +2 -2
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  require "rubygems"
3
- gem "nginxtra", "= 1.2.6.8"
3
+ gem "nginxtra", "= 1.2.7.8"
4
4
  gem "thor", "~> 0.16.0"
5
5
  require "nginxtra"
6
6
  Nginxtra::CLI.start
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  require "rubygems"
3
- gem "nginxtra", "= 1.2.6.8"
3
+ gem "nginxtra", "= 1.2.7.8"
4
4
  gem "thor", "~> 0.16.0"
5
5
  require "nginxtra"
6
6
  Nginxtra::Rails::CLI.start
@@ -6,7 +6,7 @@ module Nginxtra
6
6
  end
7
7
 
8
8
  def to_s
9
- "1.2.6.8"
9
+ "1.2.7.8"
10
10
  end
11
11
  end
12
12
  end
@@ -1,4 +1,76 @@
1
1
 
2
+ Changes with nginx 1.2.7 12 Feb 2013
3
+
4
+ *) Change: now if the "include" directive with mask is used on Unix
5
+ systems, included files are sorted in alphabetical order.
6
+
7
+ *) Change: the "add_header" directive adds headers to 201 responses.
8
+
9
+ *) Feature: the "geo" directive now supports IPv6 addresses in CIDR
10
+ notation.
11
+
12
+ *) Feature: the "flush" and "gzip" parameters of the "access_log"
13
+ directive.
14
+
15
+ *) Feature: variables support in the "auth_basic" directive.
16
+
17
+ *) Feature: the $pipe, $request_length, $time_iso8601, and $time_local
18
+ variables can now be used not only in the "log_format" directive.
19
+ Thanks to Kiril Kalchev.
20
+
21
+ *) Feature: IPv6 support in the ngx_http_geoip_module.
22
+ Thanks to Gregor Kališnik.
23
+
24
+ *) Bugfix: nginx could not be built with the ngx_http_perl_module in
25
+ some cases.
26
+
27
+ *) Bugfix: a segmentation fault might occur in a worker process if the
28
+ ngx_http_xslt_module was used.
29
+
30
+ *) Bugfix: nginx could not be built on MacOSX in some cases.
31
+ Thanks to Piotr Sikora.
32
+
33
+ *) Bugfix: the "limit_rate" directive with high rates might result in
34
+ truncated responses on 32-bit platforms.
35
+ Thanks to Alexey Antropov.
36
+
37
+ *) Bugfix: a segmentation fault might occur in a worker process if the
38
+ "if" directive was used.
39
+ Thanks to Piotr Sikora.
40
+
41
+ *) Bugfix: a "100 Continue" response was issued with "413 Request Entity
42
+ Too Large" responses.
43
+
44
+ *) Bugfix: the "image_filter", "image_filter_jpeg_quality" and
45
+ "image_filter_sharpen" directives might be inherited incorrectly.
46
+ Thanks to Ian Babrou.
47
+
48
+ *) Bugfix: "crypt_r() failed" errors might appear if the "auth_basic"
49
+ directive was used on Linux.
50
+
51
+ *) Bugfix: in backup servers handling.
52
+ Thanks to Thomas Chen.
53
+
54
+ *) Bugfix: proxied HEAD requests might return incorrect response if the
55
+ "gzip" directive was used.
56
+
57
+ *) Bugfix: a segmentation fault occurred on start or during
58
+ reconfiguration if the "keepalive" directive was specified more than
59
+ once in a single upstream block.
60
+
61
+ *) Bugfix: in the "proxy_method" directive.
62
+
63
+ *) Bugfix: a segmentation fault might occur in a worker process if
64
+ resolver was used with the poll method.
65
+
66
+ *) Bugfix: nginx might hog CPU during SSL handshake with a backend if
67
+ the select, poll, or /dev/poll methods were used.
68
+
69
+ *) Bugfix: the "[crit] SSL_write() failed (SSL:)" error.
70
+
71
+ *) Bugfix: in the "fastcgi_keep_conn" directive.
72
+
73
+
2
74
  Changes with nginx 1.2.6 11 Dec 2012
3
75
 
4
76
  *) Feature: the $request_time and $msec variables can now be used not
@@ -1,4 +1,80 @@
1
1
 
2
+ Изменения в nginx 1.2.7 12.02.2013
3
+
4
+ *) Изменение: теперь при использовании директивы include с маской на
5
+ Unix-системах включаемые файлы сортируются в алфавитном порядке.
6
+
7
+ *) Изменение: директива add_header добавляет строки в ответы с кодом
8
+ 201.
9
+
10
+ *) Добавление: директива geo теперь поддерживает IPv6 адреса в формате
11
+ CIDR.
12
+
13
+ *) Добавление: параметры flush и gzip в директиве access_log.
14
+
15
+ *) Добавление: директива auth_basic поддерживает переменные.
16
+
17
+ *) Добавление: переменные $pipe, $request_length, $time_iso8601 и
18
+ $time_local теперь можно использовать не только в директиве
19
+ log_format.
20
+ Спасибо Kiril Kalchev.
21
+
22
+ *) Добавление: поддержка IPv6 в модуле ngx_http_geoip_module.
23
+ Спасибо Gregor Kališnik.
24
+
25
+ *) Исправление: nginx в некоторых случаях не собирался с модулем
26
+ ngx_http_perl_module.
27
+
28
+ *) Исправление: в рабочем процессе мог произойти segmentation fault,
29
+ если использовался модуль ngx_http_xslt_module.
30
+
31
+ *) Исправление: nginx мог не собираться на MacOSX.
32
+ Спасибо Piotr Sikora.
33
+
34
+ *) Исправление: при использовании директивы limit_rate с большими
35
+ значениями скорости на 32-битных системах ответ мог возвращаться не
36
+ целиком.
37
+ Спасибо Алексею Антропову.
38
+
39
+ *) Исправление: в рабочем процессе мог произойти segmentation fault,
40
+ если использовалась директива if.
41
+ Спасибо Piotr Sikora.
42
+
43
+ *) Исправление: ответ "100 Continue" выдавался вместе с ответом "413
44
+ Request Entity Too Large".
45
+
46
+ *) Исправление: директивы image_filter, image_filter_jpeg_quality и
47
+ image_filter_sharpen могли наследоваться некорректно.
48
+ Спасибо Ивану Боброву.
49
+
50
+ *) Исправление: при использовании директивы auth_basic под Linux могли
51
+ возникать ошибки "crypt_r() failed".
52
+
53
+ *) Исправление: в обработке backup-серверов.
54
+ Спасибо Thomas Chen.
55
+
56
+ *) Исправление: при проксировании HEAD-запросов мог возвращаться
57
+ некорректный ответ, если использовалась директива gzip.
58
+
59
+ *) Исправление: на старте или во время переконфигурации происходил
60
+ segmentation fault, если директива keepalive была указана несколько
61
+ раз в одном блоке upstream.
62
+
63
+ *) Исправление: директива proxy_method работала неверно, если была
64
+ указана на уровне http.
65
+
66
+ *) Исправление: в рабочем процессе мог произойти segmentation fault,
67
+ если использовался resolver и метод poll.
68
+
69
+ *) Исправление: nginx мог нагружать процессор во время SSL handshake с
70
+ бэкендом при использовании методов обработки соединений select, poll
71
+ и /dev/poll.
72
+
73
+ *) Исправление: ошибка "[crit] SSL_write() failed (SSL:)".
74
+
75
+ *) Исправление: в директиве fastcgi_keep_conn.
76
+
77
+
2
78
  Изменения в nginx 1.2.6 11.12.2012
3
79
 
4
80
  *) Добавление: переменные $request_time и $msec теперь можно
@@ -1,6 +1,6 @@
1
1
  /*
2
- * Copyright (C) 2002-2012 Igor Sysoev
3
- * Copyright (C) 2011,2012 Nginx, Inc.
2
+ * Copyright (C) 2002-2013 Igor Sysoev
3
+ * Copyright (C) 2011-2013 Nginx, Inc.
4
4
  * All rights reserved.
5
5
  *
6
6
  * Redistribution and use in source and binary forms, with or without
@@ -73,9 +73,6 @@ CFLAGS="$CFLAGS -WX"
73
73
  # disable logo
74
74
  CFLAGS="$CFLAGS -nologo"
75
75
 
76
-
77
- LINK="\$(CC)"
78
-
79
76
  # the link flags
80
77
  CORE_LINK="$CORE_LINK -link -verbose:lib"
81
78
 
@@ -6,7 +6,7 @@
6
6
  ngx_feature="GeoIP library"
7
7
  ngx_feature_name=
8
8
  ngx_feature_run=no
9
- ngx_feature_incs=
9
+ ngx_feature_incs="#include <GeoIP.h>"
10
10
  ngx_feature_path=
11
11
  ngx_feature_libs="-lGeoIP"
12
12
  ngx_feature_test="GeoIP_open(NULL, 0)"
@@ -18,6 +18,7 @@ if [ $ngx_found = no ]; then
18
18
  # FreeBSD port
19
19
 
20
20
  ngx_feature="GeoIP library in /usr/local/"
21
+ ngx_feature_path="/usr/local/include"
21
22
 
22
23
  if [ $NGX_RPATH = YES ]; then
23
24
  ngx_feature_libs="-R/usr/local/lib -L/usr/local/lib -lGeoIP"
@@ -34,7 +35,7 @@ if [ $ngx_found = no ]; then
34
35
  # NetBSD port
35
36
 
36
37
  ngx_feature="GeoIP library in /usr/pkg/"
37
- ngx_feature_path="/usr/pkg/include/"
38
+ ngx_feature_path="/usr/pkg/include"
38
39
 
39
40
  if [ $NGX_RPATH = YES ]; then
40
41
  ngx_feature_libs="-R/usr/pkg/lib -L/usr/pkg/lib -lGeoIP"
@@ -64,8 +65,22 @@ fi
64
65
 
65
66
 
66
67
  if [ $ngx_found = yes ]; then
68
+
69
+ CORE_INCS="$CORE_INCS $ngx_feature_path"
67
70
  CORE_LIBS="$CORE_LIBS $ngx_feature_libs"
68
71
 
72
+ if [ $NGX_IPV6 = YES ]; then
73
+ ngx_feature="GeoIP IPv6 support"
74
+ ngx_feature_name="NGX_HAVE_GEOIP_V6"
75
+ ngx_feature_run=no
76
+ ngx_feature_incs="#include <stdio.h>
77
+ #include <GeoIP.h>"
78
+ #ngx_feature_path=
79
+ #ngx_feature_libs=
80
+ ngx_feature_test="printf(\"%d\", GEOIP_CITY_EDITION_REV0_V6);"
81
+ . auto/feature
82
+ fi
83
+
69
84
  else
70
85
 
71
86
  cat << END
@@ -35,7 +35,7 @@ if [ $ngx_found = no ]; then
35
35
  # NetBSD port
36
36
 
37
37
  ngx_feature="GD library in /usr/pkg/"
38
- ngx_feature_path="/usr/pkg/include/"
38
+ ngx_feature_path="/usr/pkg/include"
39
39
 
40
40
  if [ $NGX_RPATH = YES ]; then
41
41
  ngx_feature_libs="-R/usr/pkg/lib -L/usr/pkg/lib -lgd"
@@ -172,6 +172,7 @@ else
172
172
  ngx_feature="PCRE JIT support"
173
173
  ngx_feature_name="NGX_HAVE_PCRE_JIT"
174
174
  ngx_feature_test="int jit = 0;
175
+ pcre_free_study(NULL);
175
176
  pcre_config(PCRE_CONFIG_JIT, &jit);
176
177
  if (jit != 1) return 1;"
177
178
  . auto/feature
@@ -26,9 +26,7 @@ $NGX_OBJS/src/http/modules/perl/Makefile: \
26
26
 
27
27
  cd $NGX_OBJS/src/http/modules/perl \
28
28
  && NGX_PM_CFLAGS="\$(NGX_PM_CFLAGS) -g $NGX_CC_OPT" \
29
- NGX_PCRE=$PCRE \
30
- NGX_OBJS=$NGX_OBJS \
31
- NGX_OPENSSL=$OPENSSL \
29
+ NGX_INCS="$CORE_INCS $NGX_OBJS $HTTP_INCS" \
32
30
  $NGX_PERL Makefile.PL \
33
31
  LIB=$NGX_PERL_MODULES \
34
32
  INSTALLSITEMAN3DIR=$NGX_PERL_MODULES_MAN
@@ -9,11 +9,13 @@ if [ $ZLIB != NONE ]; then
9
9
  case "$NGX_CC_NAME" in
10
10
 
11
11
  msvc* | owc* | bcc)
12
+ have=NGX_ZLIB . auto/have
12
13
  LINK_DEPS="$LINK_DEPS $ZLIB/zlib.lib"
13
14
  CORE_LIBS="$CORE_LIBS $ZLIB/zlib.lib"
14
15
  ;;
15
16
 
16
17
  icc*)
18
+ have=NGX_ZLIB . auto/have
17
19
  LINK_DEPS="$LINK_DEPS $ZLIB/libz.a"
18
20
 
19
21
  # to allow -ipo optimization we link with the *.o but not library
@@ -30,6 +32,7 @@ if [ $ZLIB != NONE ]; then
30
32
  ;;
31
33
 
32
34
  *)
35
+ have=NGX_ZLIB . auto/have
33
36
  LINK_DEPS="$LINK_DEPS $ZLIB/libz.a"
34
37
  CORE_LIBS="$CORE_LIBS $ZLIB/libz.a"
35
38
  #CORE_LIBS="$CORE_LIBS -L $ZLIB -lz"
@@ -45,7 +48,7 @@ else
45
48
  # FreeBSD, Solaris, Linux
46
49
 
47
50
  ngx_feature="zlib library"
48
- ngx_feature_name=
51
+ ngx_feature_name="NGX_ZLIB"
49
52
  ngx_feature_run=no
50
53
  ngx_feature_incs="#include <zlib.h>"
51
54
  ngx_feature_path=
@@ -1,6 +1,6 @@
1
1
  .\"
2
- .\" Copyright (c) 2010 Sergey A. Osokin
3
- .\" Copyright (c) 2011,2012 Nginx, Inc.
2
+ .\" Copyright (C) 2010 Sergey A. Osokin
3
+ .\" Copyright (C) Nginx, Inc.
4
4
  .\" All rights reserved.
5
5
  .\"
6
6
  .\" Redistribution and use in source and binary forms, with or without
@@ -9,8 +9,8 @@
9
9
  #define _NGINX_H_INCLUDED_
10
10
 
11
11
 
12
- #define nginx_version 1002006
13
- #define NGINX_VERSION "1.2.6"
12
+ #define nginx_version 1002007
13
+ #define NGINX_VERSION "1.2.7"
14
14
  #define NGINX_VER "nginx/" NGINX_VERSION
15
15
 
16
16
  #define NGINX_VAR "NGINX"
@@ -945,7 +945,8 @@ ngx_conf_open_file(ngx_cycle_t *cycle, ngx_str_t *name)
945
945
  file->name = *name;
946
946
  }
947
947
 
948
- file->buffer = NULL;
948
+ file->flush = NULL;
949
+ file->data = NULL;
949
950
 
950
951
  return file;
951
952
  }
@@ -954,7 +955,6 @@ ngx_conf_open_file(ngx_cycle_t *cycle, ngx_str_t *name)
954
955
  static void
955
956
  ngx_conf_flush_files(ngx_cycle_t *cycle)
956
957
  {
957
- ssize_t n, len;
958
958
  ngx_uint_t i;
959
959
  ngx_list_part_t *part;
960
960
  ngx_open_file_t *file;
@@ -975,23 +975,8 @@ ngx_conf_flush_files(ngx_cycle_t *cycle)
975
975
  i = 0;
976
976
  }
977
977
 
978
- len = file[i].pos - file[i].buffer;
979
-
980
- if (file[i].buffer == NULL || len == 0) {
981
- continue;
982
- }
983
-
984
- n = ngx_write_fd(file[i].fd, file[i].buffer, len);
985
-
986
- if (n == NGX_FILE_ERROR) {
987
- ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
988
- ngx_write_fd_n " to \"%s\" failed",
989
- file[i].name.data);
990
-
991
- } else if (n != len) {
992
- ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
993
- ngx_write_fd_n " to \"%s\" was incomplete: %z of %uz",
994
- file[i].name.data, n, len);
978
+ if (file[i].flush) {
979
+ file[i].flush(&file[i], cycle->log);
995
980
  }
996
981
  }
997
982
  }
@@ -91,17 +91,8 @@ struct ngx_open_file_s {
91
91
  ngx_fd_t fd;
92
92
  ngx_str_t name;
93
93
 
94
- u_char *buffer;
95
- u_char *pos;
96
- u_char *last;
97
-
98
- #if 0
99
- /* e.g. append mode, error_log */
100
- ngx_uint_t flags;
101
- /* e.g. reopen db file */
102
- ngx_uint_t (*handler)(void *data, ngx_open_file_t *file);
94
+ void (*flush)(ngx_open_file_t *file, ngx_log_t *log);
103
95
  void *data;
104
- #endif
105
96
  };
106
97
 
107
98
 
@@ -1115,7 +1115,6 @@ ngx_test_lockfile(u_char *file, ngx_log_t *log)
1115
1115
  void
1116
1116
  ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user)
1117
1117
  {
1118
- ssize_t n, len;
1119
1118
  ngx_fd_t fd;
1120
1119
  ngx_uint_t i;
1121
1120
  ngx_list_part_t *part;
@@ -1139,24 +1138,8 @@ ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user)
1139
1138
  continue;
1140
1139
  }
1141
1140
 
1142
- len = file[i].pos - file[i].buffer;
1143
-
1144
- if (file[i].buffer && len != 0) {
1145
-
1146
- n = ngx_write_fd(file[i].fd, file[i].buffer, len);
1147
-
1148
- if (n == NGX_FILE_ERROR) {
1149
- ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
1150
- ngx_write_fd_n " to \"%s\" failed",
1151
- file[i].name.data);
1152
-
1153
- } else if (n != len) {
1154
- ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
1155
- ngx_write_fd_n " to \"%s\" was incomplete: %z of %uz",
1156
- file[i].name.data, n, len);
1157
- }
1158
-
1159
- file[i].pos = file[i].buffer;
1141
+ if (file[i].flush) {
1142
+ file[i].flush(&file[i], cycle->log);
1160
1143
  }
1161
1144
 
1162
1145
  fd = ngx_open_file(file[i].name.data, NGX_FILE_APPEND,
@@ -732,14 +732,14 @@ ngx_copy_file(u_char *from, u_char *to, ngx_copy_file_t *cf)
732
732
 
733
733
  n = ngx_read_fd(fd, buf, len);
734
734
 
735
- if (n == NGX_FILE_ERROR) {
735
+ if (n == -1) {
736
736
  ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno,
737
737
  ngx_read_fd_n " \"%s\" failed", from);
738
738
  goto failed;
739
739
  }
740
740
 
741
741
  if ((size_t) n != len) {
742
- ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno,
742
+ ngx_log_error(NGX_LOG_ALERT, cf->log, 0,
743
743
  ngx_read_fd_n " has read only %z of %uz from %s",
744
744
  n, size, from);
745
745
  goto failed;
@@ -747,14 +747,14 @@ ngx_copy_file(u_char *from, u_char *to, ngx_copy_file_t *cf)
747
747
 
748
748
  n = ngx_write_fd(nfd, buf, len);
749
749
 
750
- if (n == NGX_FILE_ERROR) {
750
+ if (n == -1) {
751
751
  ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno,
752
752
  ngx_write_fd_n " \"%s\" failed", to);
753
753
  goto failed;
754
754
  }
755
755
 
756
756
  if ((size_t) n != len) {
757
- ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno,
757
+ ngx_log_error(NGX_LOG_ALERT, cf->log, 0,
758
758
  ngx_write_fd_n " has written only %z of %uz to %s",
759
759
  n, size, to);
760
760
  goto failed;