Mercurial > hg > nginx
annotate src/core/nginx.c @ 7883:41f4bd4c51f1
Disabled control characters and space in header names.
Control characters (0x00-0x1f, 0x7f), space, and colon were never allowed in
header names. The only somewhat valid use is header continuation which nginx
never supported and which is explicitly obsolete by RFC 7230.
Previously, such headers were considered invalid and were ignored by default
(as per ignore_invalid_headers directive). With this change, such headers
are unconditionally rejected.
It is expected to make nginx more resilient to various attacks, in particular,
with ignore_invalid_headers switched off (which is inherently unsecure, though
nevertheless sometimes used in the wild).
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 28 Jun 2021 18:01:18 +0300 |
parents | f18db38a9826 |
children | 7df607cb2d11 |
rev | line source |
---|---|
441
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
440
diff
changeset
|
1 |
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
440
diff
changeset
|
2 /* |
444
42d11f017717
nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents:
443
diff
changeset
|
3 * Copyright (C) Igor Sysoev |
4412 | 4 * Copyright (C) Nginx, Inc. |
441
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
440
diff
changeset
|
5 */ |
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
440
diff
changeset
|
6 |
98
c9b243802a17
nginx-0.0.1-2003-05-30-18:27:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
97
diff
changeset
|
7 |
c9b243802a17
nginx-0.0.1-2003-05-30-18:27:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
97
diff
changeset
|
8 #include <ngx_config.h> |
c9b243802a17
nginx-0.0.1-2003-05-30-18:27:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
97
diff
changeset
|
9 #include <ngx_core.h> |
0
4eff17414a43
nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
10 #include <nginx.h> |
4eff17414a43
nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
11 |
4eff17414a43
nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
12 |
6446
0ff7eff48c7e
Fix build with -Wmissing-prototypes.
Piotr Sikora <piotrsikora@google.com>
parents:
6402
diff
changeset
|
13 static void ngx_show_version_info(void); |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
14 static ngx_int_t ngx_add_inherited_sockets(ngx_cycle_t *cycle); |
6822
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
15 static void ngx_cleanup_environment(void *data); |
2730
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
16 static ngx_int_t ngx_get_options(int argc, char *const *argv); |
2758 | 17 static ngx_int_t ngx_process_options(ngx_cycle_t *cycle); |
452 | 18 static ngx_int_t ngx_save_argv(ngx_cycle_t *cycle, int argc, char *const *argv); |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
19 static void *ngx_core_module_create_conf(ngx_cycle_t *cycle); |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
20 static char *ngx_core_module_init_conf(ngx_cycle_t *cycle, void *conf); |
234
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
21 static char *ngx_set_user(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); |
1069 | 22 static char *ngx_set_env(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); |
473 | 23 static char *ngx_set_priority(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); |
577 | 24 static char *ngx_set_cpu_affinity(ngx_conf_t *cf, ngx_command_t *cmd, |
25 void *conf); | |
4890
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
26 static char *ngx_set_worker_processes(ngx_conf_t *cf, ngx_command_t *cmd, |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
27 void *conf); |
6383 | 28 static char *ngx_load_module(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); |
29 #if (NGX_HAVE_DLOPEN) | |
30 static void ngx_unload_module(void *data); | |
31 #endif | |
3
34a521b1a148
nginx-0.0.1-2002-08-20-18:48:28 import
Igor Sysoev <igor@sysoev.ru>
parents:
2
diff
changeset
|
32 |
117
f6e3c5d019b6
nginx-0.0.1-2003-07-11-19:17:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
115
diff
changeset
|
33 |
461 | 34 static ngx_conf_enum_t ngx_debug_points[] = { |
35 { ngx_string("stop"), NGX_DEBUG_POINTS_STOP }, | |
36 { ngx_string("abort"), NGX_DEBUG_POINTS_ABORT }, | |
37 { ngx_null_string, 0 } | |
577 | 38 }; |
461 | 39 |
40 | |
117
f6e3c5d019b6
nginx-0.0.1-2003-07-11-19:17:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
115
diff
changeset
|
41 static ngx_command_t ngx_core_commands[] = { |
f6e3c5d019b6
nginx-0.0.1-2003-07-11-19:17:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
115
diff
changeset
|
42 |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
43 { ngx_string("daemon"), |
563 | 44 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_FLAG, |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
45 ngx_conf_set_flag_slot, |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
46 0, |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
47 offsetof(ngx_core_conf_t, daemon), |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
48 NULL }, |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
49 |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
50 { ngx_string("master_process"), |
563 | 51 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_FLAG, |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
52 ngx_conf_set_flag_slot, |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
53 0, |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
54 offsetof(ngx_core_conf_t, master), |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
55 NULL }, |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
56 |
563 | 57 { ngx_string("timer_resolution"), |
58 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1, | |
59 ngx_conf_set_msec_slot, | |
60 0, | |
61 offsetof(ngx_core_conf_t, timer_resolution), | |
62 NULL }, | |
63 | |
543 | 64 { ngx_string("pid"), |
65 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1, | |
66 ngx_conf_set_str_slot, | |
67 0, | |
68 offsetof(ngx_core_conf_t, pid), | |
69 NULL }, | |
70 | |
611 | 71 { ngx_string("lock_file"), |
72 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1, | |
73 ngx_conf_set_str_slot, | |
74 0, | |
75 offsetof(ngx_core_conf_t, lock_file), | |
76 NULL }, | |
77 | |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
78 { ngx_string("worker_processes"), |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
79 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1, |
4890
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
80 ngx_set_worker_processes, |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
81 0, |
4890
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
82 0, |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
83 NULL }, |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
84 |
461 | 85 { ngx_string("debug_points"), |
86 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1, | |
87 ngx_conf_set_enum_slot, | |
88 0, | |
89 offsetof(ngx_core_conf_t, debug_points), | |
90 &ngx_debug_points }, | |
91 | |
543 | 92 { ngx_string("user"), |
93 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE12, | |
94 ngx_set_user, | |
95 0, | |
96 0, | |
97 NULL }, | |
98 | |
99 { ngx_string("worker_priority"), | |
100 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1, | |
101 ngx_set_priority, | |
102 0, | |
103 0, | |
104 NULL }, | |
105 | |
577 | 106 { ngx_string("worker_cpu_affinity"), |
107 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_1MORE, | |
108 ngx_set_cpu_affinity, | |
109 0, | |
110 0, | |
111 NULL }, | |
112 | |
543 | 113 { ngx_string("worker_rlimit_nofile"), |
114 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1, | |
115 ngx_conf_set_num_slot, | |
116 0, | |
117 offsetof(ngx_core_conf_t, rlimit_nofile), | |
118 NULL }, | |
119 | |
589 | 120 { ngx_string("worker_rlimit_core"), |
121 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1, | |
3762
89002ac695e5
worker_rlimit_core should be off_t
Igor Sysoev <igor@sysoev.ru>
parents:
3750
diff
changeset
|
122 ngx_conf_set_off_slot, |
589 | 123 0, |
124 offsetof(ngx_core_conf_t, rlimit_core), | |
125 NULL }, | |
126 | |
6930
97c99bb43737
Introduced worker_shutdown_timeout.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6822
diff
changeset
|
127 { ngx_string("worker_shutdown_timeout"), |
97c99bb43737
Introduced worker_shutdown_timeout.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6822
diff
changeset
|
128 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1, |
97c99bb43737
Introduced worker_shutdown_timeout.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6822
diff
changeset
|
129 ngx_conf_set_msec_slot, |
97c99bb43737
Introduced worker_shutdown_timeout.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6822
diff
changeset
|
130 0, |
97c99bb43737
Introduced worker_shutdown_timeout.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6822
diff
changeset
|
131 offsetof(ngx_core_conf_t, shutdown_timeout), |
97c99bb43737
Introduced worker_shutdown_timeout.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6822
diff
changeset
|
132 NULL }, |
97c99bb43737
Introduced worker_shutdown_timeout.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6822
diff
changeset
|
133 |
543 | 134 { ngx_string("working_directory"), |
135 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1, | |
136 ngx_conf_set_str_slot, | |
137 0, | |
138 offsetof(ngx_core_conf_t, working_directory), | |
139 NULL }, | |
140 | |
1069 | 141 { ngx_string("env"), |
142 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1, | |
143 ngx_set_env, | |
144 0, | |
145 0, | |
146 NULL }, | |
147 | |
6383 | 148 { ngx_string("load_module"), |
149 NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1, | |
150 ngx_load_module, | |
151 0, | |
152 0, | |
153 NULL }, | |
154 | |
209
e1c815be05ae
nginx-0.0.1-2003-12-09-18:08:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
207
diff
changeset
|
155 ngx_null_command |
117
f6e3c5d019b6
nginx-0.0.1-2003-07-11-19:17:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
115
diff
changeset
|
156 }; |
f6e3c5d019b6
nginx-0.0.1-2003-07-11-19:17:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
115
diff
changeset
|
157 |
f6e3c5d019b6
nginx-0.0.1-2003-07-11-19:17:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
115
diff
changeset
|
158 |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
159 static ngx_core_module_t ngx_core_module_ctx = { |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
160 ngx_string("core"), |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
161 ngx_core_module_create_conf, |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
162 ngx_core_module_init_conf |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
163 }; |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
164 |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
165 |
117
f6e3c5d019b6
nginx-0.0.1-2003-07-11-19:17:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
115
diff
changeset
|
166 ngx_module_t ngx_core_module = { |
509 | 167 NGX_MODULE_V1, |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
168 &ngx_core_module_ctx, /* module context */ |
117
f6e3c5d019b6
nginx-0.0.1-2003-07-11-19:17:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
115
diff
changeset
|
169 ngx_core_commands, /* module directives */ |
f6e3c5d019b6
nginx-0.0.1-2003-07-11-19:17:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
115
diff
changeset
|
170 NGX_CORE_MODULE, /* module type */ |
541 | 171 NULL, /* init master */ |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
172 NULL, /* init module */ |
541 | 173 NULL, /* init process */ |
174 NULL, /* init thread */ | |
175 NULL, /* exit thread */ | |
176 NULL, /* exit process */ | |
177 NULL, /* exit master */ | |
178 NGX_MODULE_V1_PADDING | |
117
f6e3c5d019b6
nginx-0.0.1-2003-07-11-19:17:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
115
diff
changeset
|
179 }; |
f6e3c5d019b6
nginx-0.0.1-2003-07-11-19:17:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
115
diff
changeset
|
180 |
f6e3c5d019b6
nginx-0.0.1-2003-07-11-19:17:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
115
diff
changeset
|
181 |
2735 | 182 static ngx_uint_t ngx_show_help; |
2725 | 183 static ngx_uint_t ngx_show_version; |
184 static ngx_uint_t ngx_show_configure; | |
2758 | 185 static u_char *ngx_prefix; |
7744
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
186 static u_char *ngx_error_log; |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
187 static u_char *ngx_conf_file; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
188 static u_char *ngx_conf_params; |
2725 | 189 static char *ngx_signal; |
190 | |
639 | 191 |
1069 | 192 static char **ngx_os_environ; |
601 | 193 |
107
b5be4b0448d3
nginx-0.0.1-2003-07-01-19:00:03 import
Igor Sysoev <igor@sysoev.ru>
parents:
106
diff
changeset
|
194 |
503 | 195 int ngx_cdecl |
499 | 196 main(int argc, char *const *argv) |
107
b5be4b0448d3
nginx-0.0.1-2003-07-01-19:00:03 import
Igor Sysoev <igor@sysoev.ru>
parents:
106
diff
changeset
|
197 { |
6187
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
198 ngx_buf_t *b; |
452 | 199 ngx_log_t *log; |
6187
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
200 ngx_uint_t i; |
452 | 201 ngx_cycle_t *cycle, init_cycle; |
6187
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
202 ngx_conf_dump_t *cd; |
452 | 203 ngx_core_conf_t *ccf; |
107
b5be4b0448d3
nginx-0.0.1-2003-07-01-19:00:03 import
Igor Sysoev <igor@sysoev.ru>
parents:
106
diff
changeset
|
204 |
4222
2dd6c7cb211a
FreeBSD's MALLOC_OPTIONS must be set before any malloc() call.
Igor Sysoev <igor@sysoev.ru>
parents:
3798
diff
changeset
|
205 ngx_debug_init(); |
2dd6c7cb211a
FreeBSD's MALLOC_OPTIONS must be set before any malloc() call.
Igor Sysoev <igor@sysoev.ru>
parents:
3798
diff
changeset
|
206 |
3798
61d64ab739a0
move ngx_strerror_init() at the very start
Igor Sysoev <igor@sysoev.ru>
parents:
3787
diff
changeset
|
207 if (ngx_strerror_init() != NGX_OK) { |
61d64ab739a0
move ngx_strerror_init() at the very start
Igor Sysoev <igor@sysoev.ru>
parents:
3787
diff
changeset
|
208 return 1; |
61d64ab739a0
move ngx_strerror_init() at the very start
Igor Sysoev <igor@sysoev.ru>
parents:
3787
diff
changeset
|
209 } |
61d64ab739a0
move ngx_strerror_init() at the very start
Igor Sysoev <igor@sysoev.ru>
parents:
3787
diff
changeset
|
210 |
2730
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
211 if (ngx_get_options(argc, argv) != NGX_OK) { |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
212 return 1; |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
213 } |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
214 |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
215 if (ngx_show_version) { |
6257
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
216 ngx_show_version_info(); |
2730
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
217 |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
218 if (!ngx_test_config) { |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
219 return 0; |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
220 } |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
221 } |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
222 |
108
adc093f880c8
nginx-0.0.1-2003-07-02-09:01:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
107
diff
changeset
|
223 /* TODO */ ngx_max_sockets = -1; |
107
b5be4b0448d3
nginx-0.0.1-2003-07-01-19:00:03 import
Igor Sysoev <igor@sysoev.ru>
parents:
106
diff
changeset
|
224 |
195
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
194
diff
changeset
|
225 ngx_time_init(); |
221
401154e21826
nginx-0.0.1-2004-01-08-20:08:10 import
Igor Sysoev <igor@sysoev.ru>
parents:
220
diff
changeset
|
226 |
455 | 227 #if (NGX_PCRE) |
195
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
194
diff
changeset
|
228 ngx_regex_init(); |
212
679f60139863
nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
210
diff
changeset
|
229 #endif |
182
3c49eaf3f522
nginx-0.0.1-2003-11-13-09:14:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
144
diff
changeset
|
230 |
443
33aec431094b
nginx-0.1.0-2004-09-29-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
441
diff
changeset
|
231 ngx_pid = ngx_getpid(); |
7162
8b84d60ef13d
Fixed "changing binary" when reaper is not init.
Ruslan Ermilov <ru@nginx.com>
parents:
7081
diff
changeset
|
232 ngx_parent = ngx_getppid(); |
443
33aec431094b
nginx-0.1.0-2004-09-29-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
441
diff
changeset
|
233 |
7744
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
234 log = ngx_log_init(ngx_prefix, ngx_error_log); |
501 | 235 if (log == NULL) { |
444
42d11f017717
nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents:
443
diff
changeset
|
236 return 1; |
42d11f017717
nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents:
443
diff
changeset
|
237 } |
107
b5be4b0448d3
nginx-0.0.1-2003-07-01-19:00:03 import
Igor Sysoev <igor@sysoev.ru>
parents:
106
diff
changeset
|
238 |
541 | 239 /* STUB */ |
393
5659d773cfa8
nginx-0.0.7-2004-07-15-20:35:51 import
Igor Sysoev <igor@sysoev.ru>
parents:
376
diff
changeset
|
240 #if (NGX_OPENSSL) |
5659d773cfa8
nginx-0.0.7-2004-07-15-20:35:51 import
Igor Sysoev <igor@sysoev.ru>
parents:
376
diff
changeset
|
241 ngx_ssl_init(log); |
5659d773cfa8
nginx-0.0.7-2004-07-15-20:35:51 import
Igor Sysoev <igor@sysoev.ru>
parents:
376
diff
changeset
|
242 #endif |
5659d773cfa8
nginx-0.0.7-2004-07-15-20:35:51 import
Igor Sysoev <igor@sysoev.ru>
parents:
376
diff
changeset
|
243 |
2730
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
244 /* |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
245 * init_cycle->log is required for signal handlers and |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
246 * ngx_process_options() |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
247 */ |
212
679f60139863
nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
210
diff
changeset
|
248 |
679f60139863
nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
210
diff
changeset
|
249 ngx_memzero(&init_cycle, sizeof(ngx_cycle_t)); |
679f60139863
nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
210
diff
changeset
|
250 init_cycle.log = log; |
679f60139863
nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
210
diff
changeset
|
251 ngx_cycle = &init_cycle; |
679f60139863
nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
210
diff
changeset
|
252 |
501 | 253 init_cycle.pool = ngx_create_pool(1024, log); |
254 if (init_cycle.pool == NULL) { | |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
255 return 1; |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
256 } |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
257 |
611 | 258 if (ngx_save_argv(&init_cycle, argc, argv) != NGX_OK) { |
452 | 259 return 1; |
260 } | |
261 | |
2758 | 262 if (ngx_process_options(&init_cycle) != NGX_OK) { |
263 return 1; | |
264 } | |
448
241dc8092a33
nginx-0.1.0-2004-10-01-19:53:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
444
diff
changeset
|
265 |
611 | 266 if (ngx_os_init(log) != NGX_OK) { |
443
33aec431094b
nginx-0.1.0-2004-09-29-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
441
diff
changeset
|
267 return 1; |
33aec431094b
nginx-0.1.0-2004-09-29-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
441
diff
changeset
|
268 } |
33aec431094b
nginx-0.1.0-2004-09-29-00:09:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
441
diff
changeset
|
269 |
1694
8c696afe46b3
rename ngx_crc32_init() to ngx_crc32_table_init()
Igor Sysoev <igor@sysoev.ru>
parents:
1407
diff
changeset
|
270 /* |
8c696afe46b3
rename ngx_crc32_init() to ngx_crc32_table_init()
Igor Sysoev <igor@sysoev.ru>
parents:
1407
diff
changeset
|
271 * ngx_crc32_table_init() requires ngx_cacheline_size set in ngx_os_init() |
8c696afe46b3
rename ngx_crc32_init() to ngx_crc32_table_init()
Igor Sysoev <igor@sysoev.ru>
parents:
1407
diff
changeset
|
272 */ |
930
45df22906c12
allocate aligned ngx_crc32_table_short globally
Igor Sysoev <igor@sysoev.ru>
parents:
860
diff
changeset
|
273 |
1694
8c696afe46b3
rename ngx_crc32_init() to ngx_crc32_table_init()
Igor Sysoev <igor@sysoev.ru>
parents:
1407
diff
changeset
|
274 if (ngx_crc32_table_init() != NGX_OK) { |
930
45df22906c12
allocate aligned ngx_crc32_table_short globally
Igor Sysoev <igor@sysoev.ru>
parents:
860
diff
changeset
|
275 return 1; |
45df22906c12
allocate aligned ngx_crc32_table_short globally
Igor Sysoev <igor@sysoev.ru>
parents:
860
diff
changeset
|
276 } |
45df22906c12
allocate aligned ngx_crc32_table_short globally
Igor Sysoev <igor@sysoev.ru>
parents:
860
diff
changeset
|
277 |
7081
69f9ee0342db
Slab: fixed initialization on win32.
Ruslan Ermilov <ru@nginx.com>
parents:
6930
diff
changeset
|
278 /* |
69f9ee0342db
Slab: fixed initialization on win32.
Ruslan Ermilov <ru@nginx.com>
parents:
6930
diff
changeset
|
279 * ngx_slab_sizes_init() requires ngx_pagesize set in ngx_os_init() |
69f9ee0342db
Slab: fixed initialization on win32.
Ruslan Ermilov <ru@nginx.com>
parents:
6930
diff
changeset
|
280 */ |
69f9ee0342db
Slab: fixed initialization on win32.
Ruslan Ermilov <ru@nginx.com>
parents:
6930
diff
changeset
|
281 |
69f9ee0342db
Slab: fixed initialization on win32.
Ruslan Ermilov <ru@nginx.com>
parents:
6930
diff
changeset
|
282 ngx_slab_sizes_init(); |
69f9ee0342db
Slab: fixed initialization on win32.
Ruslan Ermilov <ru@nginx.com>
parents:
6930
diff
changeset
|
283 |
611 | 284 if (ngx_add_inherited_sockets(&init_cycle) != NGX_OK) { |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
285 return 1; |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
286 } |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
287 |
6378
0f203a2af17c
Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6335
diff
changeset
|
288 if (ngx_preinit_modules() != NGX_OK) { |
0f203a2af17c
Dynamic modules: moved module-related stuff to separate files.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6335
diff
changeset
|
289 return 1; |
317
1308b98496a2
nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents:
316
diff
changeset
|
290 } |
1308b98496a2
nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents:
316
diff
changeset
|
291 |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
292 cycle = ngx_init_cycle(&init_cycle); |
108
adc093f880c8
nginx-0.0.1-2003-07-02-09:01:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
107
diff
changeset
|
293 if (cycle == NULL) { |
320
d621239c30f7
nginx-0.0.3-2004-04-18-23:06:02 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
294 if (ngx_test_config) { |
2743
d8316f307b6a
issue start up errors and warning on both stderr and error_log
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
295 ngx_log_stderr(0, "configuration file %s test failed", |
2722 | 296 init_cycle.conf_file.data); |
320
d621239c30f7
nginx-0.0.3-2004-04-18-23:06:02 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
297 } |
d621239c30f7
nginx-0.0.3-2004-04-18-23:06:02 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
298 |
107
b5be4b0448d3
nginx-0.0.1-2003-07-01-19:00:03 import
Igor Sysoev <igor@sysoev.ru>
parents:
106
diff
changeset
|
299 return 1; |
b5be4b0448d3
nginx-0.0.1-2003-07-01-19:00:03 import
Igor Sysoev <igor@sysoev.ru>
parents:
106
diff
changeset
|
300 } |
b5be4b0448d3
nginx-0.0.1-2003-07-01-19:00:03 import
Igor Sysoev <igor@sysoev.ru>
parents:
106
diff
changeset
|
301 |
317
1308b98496a2
nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents:
316
diff
changeset
|
302 if (ngx_test_config) { |
3750 | 303 if (!ngx_quiet_mode) { |
304 ngx_log_stderr(0, "configuration file %s test is successful", | |
305 cycle->conf_file.data); | |
306 } | |
307 | |
6187
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
308 if (ngx_dump_config) { |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
309 cd = cycle->config_dump.elts; |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
310 |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
311 for (i = 0; i < cycle->config_dump.nelts; i++) { |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
312 |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
313 ngx_write_stdout("# configuration file "); |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
314 (void) ngx_write_fd(ngx_stdout, cd[i].name.data, |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
315 cd[i].name.len); |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
316 ngx_write_stdout(":" NGX_LINEFEED); |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
317 |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
318 b = cd[i].buffer; |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
319 |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
320 (void) ngx_write_fd(ngx_stdout, b->pos, b->last - b->pos); |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
321 ngx_write_stdout(NGX_LINEFEED); |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
322 } |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
323 } |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
324 |
317
1308b98496a2
nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents:
316
diff
changeset
|
325 return 0; |
1308b98496a2
nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents:
316
diff
changeset
|
326 } |
1308b98496a2
nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents:
316
diff
changeset
|
327 |
2923
d9c46f98b09f
a signaller process should stop configuration processing just after
Igor Sysoev <igor@sysoev.ru>
parents:
2767
diff
changeset
|
328 if (ngx_signal) { |
d9c46f98b09f
a signaller process should stop configuration processing just after
Igor Sysoev <igor@sysoev.ru>
parents:
2767
diff
changeset
|
329 return ngx_signal_process(cycle, ngx_signal); |
d9c46f98b09f
a signaller process should stop configuration processing just after
Igor Sysoev <igor@sysoev.ru>
parents:
2767
diff
changeset
|
330 } |
d9c46f98b09f
a signaller process should stop configuration processing just after
Igor Sysoev <igor@sysoev.ru>
parents:
2767
diff
changeset
|
331 |
449
3b1e8c9df9ad
nginx-0.1.0-2004-10-04-00:02:06 import
Igor Sysoev <igor@sysoev.ru>
parents:
448
diff
changeset
|
332 ngx_os_status(cycle->log); |
3b1e8c9df9ad
nginx-0.1.0-2004-10-04-00:02:06 import
Igor Sysoev <igor@sysoev.ru>
parents:
448
diff
changeset
|
333 |
114
ac69ab96328d
nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
113
diff
changeset
|
334 ngx_cycle = cycle; |
113
d7f606e25b99
nginx-0.0.1-2003-07-04-19:10:33 import
Igor Sysoev <igor@sysoev.ru>
parents:
111
diff
changeset
|
335 |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
336 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module); |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
337 |
2725 | 338 if (ccf->master && ngx_process == NGX_PROCESS_SINGLE) { |
339 ngx_process = NGX_PROCESS_MASTER; | |
340 } | |
220
4f81b931e9ff
nginx-0.0.1-2004-01-08-11:47:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
219
diff
changeset
|
341 |
2738
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2735
diff
changeset
|
342 #if !(NGX_WIN32) |
115
be27f922b9a2
nginx-0.0.1-2003-07-10-20:26:57 import
Igor Sysoev <igor@sysoev.ru>
parents:
114
diff
changeset
|
343 |
611 | 344 if (ngx_init_signals(cycle->log) != NGX_OK) { |
539 | 345 return 1; |
346 } | |
347 | |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
348 if (!ngx_inherited && ccf->daemon) { |
611 | 349 if (ngx_daemon(cycle->log) != NGX_OK) { |
115
be27f922b9a2
nginx-0.0.1-2003-07-10-20:26:57 import
Igor Sysoev <igor@sysoev.ru>
parents:
114
diff
changeset
|
350 return 1; |
be27f922b9a2
nginx-0.0.1-2003-07-10-20:26:57 import
Igor Sysoev <igor@sysoev.ru>
parents:
114
diff
changeset
|
351 } |
366
e411b1482ee3
nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
337
diff
changeset
|
352 |
e411b1482ee3
nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
337
diff
changeset
|
353 ngx_daemonized = 1; |
115
be27f922b9a2
nginx-0.0.1-2003-07-10-20:26:57 import
Igor Sysoev <igor@sysoev.ru>
parents:
114
diff
changeset
|
354 } |
be27f922b9a2
nginx-0.0.1-2003-07-10-20:26:57 import
Igor Sysoev <igor@sysoev.ru>
parents:
114
diff
changeset
|
355 |
4293
3bae3d8fb573
Fixed handling of SIGWINCH/NOACCEPT signal.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4283
diff
changeset
|
356 if (ngx_inherited) { |
3bae3d8fb573
Fixed handling of SIGWINCH/NOACCEPT signal.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4283
diff
changeset
|
357 ngx_daemonized = 1; |
3bae3d8fb573
Fixed handling of SIGWINCH/NOACCEPT signal.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4283
diff
changeset
|
358 } |
3bae3d8fb573
Fixed handling of SIGWINCH/NOACCEPT signal.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4283
diff
changeset
|
359 |
2725 | 360 #endif |
361 | |
611 | 362 if (ngx_create_pidfile(&ccf->pid, cycle->log) != NGX_OK) { |
210
00cafae0bdf1
nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
209
diff
changeset
|
363 return 1; |
00cafae0bdf1
nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
209
diff
changeset
|
364 } |
00cafae0bdf1
nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
209
diff
changeset
|
365 |
5260
e088695737c3
Core: consolidated log-related code.
Vladimir Homutov <vl@nginx.com>
parents:
5240
diff
changeset
|
366 if (ngx_log_redirect_stderr(cycle) != NGX_OK) { |
e088695737c3
Core: consolidated log-related code.
Vladimir Homutov <vl@nginx.com>
parents:
5240
diff
changeset
|
367 return 1; |
2743
d8316f307b6a
issue start up errors and warning on both stderr and error_log
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
368 } |
d8316f307b6a
issue start up errors and warning on both stderr and error_log
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
369 |
3199
b242aaf1dcfa
nginx did not close log file set by --error-log-path,
Igor Sysoev <igor@sysoev.ru>
parents:
3177
diff
changeset
|
370 if (log->file->fd != ngx_stderr) { |
b242aaf1dcfa
nginx did not close log file set by --error-log-path,
Igor Sysoev <igor@sysoev.ru>
parents:
3177
diff
changeset
|
371 if (ngx_close_file(log->file->fd) == NGX_FILE_ERROR) { |
b242aaf1dcfa
nginx did not close log file set by --error-log-path,
Igor Sysoev <igor@sysoev.ru>
parents:
3177
diff
changeset
|
372 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
b242aaf1dcfa
nginx did not close log file set by --error-log-path,
Igor Sysoev <igor@sysoev.ru>
parents:
3177
diff
changeset
|
373 ngx_close_file_n " built-in log failed"); |
b242aaf1dcfa
nginx did not close log file set by --error-log-path,
Igor Sysoev <igor@sysoev.ru>
parents:
3177
diff
changeset
|
374 } |
b242aaf1dcfa
nginx did not close log file set by --error-log-path,
Igor Sysoev <igor@sysoev.ru>
parents:
3177
diff
changeset
|
375 } |
b242aaf1dcfa
nginx did not close log file set by --error-log-path,
Igor Sysoev <igor@sysoev.ru>
parents:
3177
diff
changeset
|
376 |
2743
d8316f307b6a
issue start up errors and warning on both stderr and error_log
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
377 ngx_use_stderr = 0; |
d8316f307b6a
issue start up errors and warning on both stderr and error_log
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
378 |
2725 | 379 if (ngx_process == NGX_PROCESS_SINGLE) { |
380 ngx_single_process_cycle(cycle); | |
318
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
317
diff
changeset
|
381 |
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
317
diff
changeset
|
382 } else { |
2725 | 383 ngx_master_process_cycle(cycle); |
318
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
317
diff
changeset
|
384 } |
220
4f81b931e9ff
nginx-0.0.1-2004-01-08-11:47:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
219
diff
changeset
|
385 |
4f81b931e9ff
nginx-0.0.1-2004-01-08-11:47:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
219
diff
changeset
|
386 return 0; |
4f81b931e9ff
nginx-0.0.1-2004-01-08-11:47:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
219
diff
changeset
|
387 } |
4f81b931e9ff
nginx-0.0.1-2004-01-08-11:47:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
219
diff
changeset
|
388 |
4f81b931e9ff
nginx-0.0.1-2004-01-08-11:47:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
219
diff
changeset
|
389 |
6257
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
390 static void |
6446
0ff7eff48c7e
Fix build with -Wmissing-prototypes.
Piotr Sikora <piotrsikora@google.com>
parents:
6402
diff
changeset
|
391 ngx_show_version_info(void) |
6257
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
392 { |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
393 ngx_write_stderr("nginx version: " NGINX_VER_BUILD NGX_LINEFEED); |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
394 |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
395 if (ngx_show_help) { |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
396 ngx_write_stderr( |
7744
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
397 "Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]" NGX_LINEFEED |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
398 " [-e filename] [-c filename] [-g directives]" |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
399 NGX_LINEFEED NGX_LINEFEED |
6257
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
400 "Options:" NGX_LINEFEED |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
401 " -?,-h : this help" NGX_LINEFEED |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
402 " -v : show version and exit" NGX_LINEFEED |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
403 " -V : show version and configure options then exit" |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
404 NGX_LINEFEED |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
405 " -t : test configuration and exit" NGX_LINEFEED |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
406 " -T : test configuration, dump it and exit" |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
407 NGX_LINEFEED |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
408 " -q : suppress non-error messages " |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
409 "during configuration testing" NGX_LINEFEED |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
410 " -s signal : send signal to a master process: " |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
411 "stop, quit, reopen, reload" NGX_LINEFEED |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
412 #ifdef NGX_PREFIX |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
413 " -p prefix : set prefix path (default: " NGX_PREFIX ")" |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
414 NGX_LINEFEED |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
415 #else |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
416 " -p prefix : set prefix path (default: NONE)" NGX_LINEFEED |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
417 #endif |
7744
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
418 " -e filename : set error log file (default: " |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
419 #ifdef NGX_ERROR_LOG_STDERR |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
420 "stderr)" NGX_LINEFEED |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
421 #else |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
422 NGX_ERROR_LOG_PATH ")" NGX_LINEFEED |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
423 #endif |
6257
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
424 " -c filename : set configuration file (default: " NGX_CONF_PATH |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
425 ")" NGX_LINEFEED |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
426 " -g directives : set global directives out of configuration " |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
427 "file" NGX_LINEFEED NGX_LINEFEED |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
428 ); |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
429 } |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
430 |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
431 if (ngx_show_configure) { |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
432 |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
433 #ifdef NGX_COMPILER |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
434 ngx_write_stderr("built by " NGX_COMPILER NGX_LINEFEED); |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
435 #endif |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
436 |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
437 #if (NGX_SSL) |
6492
3b77efe05b92
SSL: SSLeay_version() is deprecated in OpenSSL 1.1.0.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6480
diff
changeset
|
438 if (ngx_strcmp(ngx_ssl_version(), OPENSSL_VERSION_TEXT) == 0) { |
6257
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
439 ngx_write_stderr("built with " OPENSSL_VERSION_TEXT NGX_LINEFEED); |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
440 } else { |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
441 ngx_write_stderr("built with " OPENSSL_VERSION_TEXT |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
442 " (running with "); |
6492
3b77efe05b92
SSL: SSLeay_version() is deprecated in OpenSSL 1.1.0.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6480
diff
changeset
|
443 ngx_write_stderr((char *) (uintptr_t) ngx_ssl_version()); |
6257
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
444 ngx_write_stderr(")" NGX_LINEFEED); |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
445 } |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
446 #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
447 ngx_write_stderr("TLS SNI support enabled" NGX_LINEFEED); |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
448 #else |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
449 ngx_write_stderr("TLS SNI support disabled" NGX_LINEFEED); |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
450 #endif |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
451 #endif |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
452 |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
453 ngx_write_stderr("configure arguments:" NGX_CONFIGURE NGX_LINEFEED); |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
454 } |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
455 } |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
456 |
5eb4d7541107
Extract out version info function.
Kurtis Nusbaum <klnusbaum@gmail.com>
parents:
6187
diff
changeset
|
457 |
499 | 458 static ngx_int_t |
459 ngx_add_inherited_sockets(ngx_cycle_t *cycle) | |
219
f57597ec5249
nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
460 { |
501 | 461 u_char *p, *v, *inherited; |
462 ngx_int_t s; | |
463 ngx_listening_t *ls; | |
219
f57597ec5249
nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
464 |
290
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
289
diff
changeset
|
465 inherited = (u_char *) getenv(NGINX_VAR); |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
466 |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
467 if (inherited == NULL) { |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
468 return NGX_OK; |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
469 } |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
470 |
461 | 471 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
472 "using inherited sockets from \"%s\"", inherited); |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
473 |
461 | 474 if (ngx_array_init(&cycle->listening, cycle->pool, 10, |
745 | 475 sizeof(ngx_listening_t)) |
2536
a6d6d762c554
small optimization: " == NGX_ERROR" > " != NGX_OK"
Igor Sysoev <igor@sysoev.ru>
parents:
2302
diff
changeset
|
476 != NGX_OK) |
461 | 477 { |
478 return NGX_ERROR; | |
479 } | |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
480 |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
481 for (p = inherited, v = p; *p; p++) { |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
482 if (*p == ':' || *p == ';') { |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
483 s = ngx_atoi(v, p - v); |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
484 if (s == NGX_ERROR) { |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
485 ngx_log_error(NGX_LOG_EMERG, cycle->log, 0, |
537 | 486 "invalid socket number \"%s\" in " NGINX_VAR |
487 " environment variable, ignoring the rest" | |
488 " of the variable", v); | |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
489 break; |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
490 } |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
491 |
290
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
289
diff
changeset
|
492 v = p + 1; |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
493 |
501 | 494 ls = ngx_array_push(&cycle->listening); |
495 if (ls == NULL) { | |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
496 return NGX_ERROR; |
290
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
289
diff
changeset
|
497 } |
219
f57597ec5249
nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
498 |
523 | 499 ngx_memzero(ls, sizeof(ngx_listening_t)); |
500 | |
501 | 501 ls->fd = (ngx_socket_t) s; |
7662
9c038f5e0464
Fixed removing of listening UNIX sockets when "changing binary".
Ruslan Ermilov <ru@nginx.com>
parents:
7248
diff
changeset
|
502 ls->inherited = 1; |
219
f57597ec5249
nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
503 } |
f57597ec5249
nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
504 } |
f57597ec5249
nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
505 |
6399
50fb3fd79f76
Core: improved logging on invalid NGINX variable (ticket #900).
Maxim Dounin <mdounin@mdounin.ru>
parents:
6383
diff
changeset
|
506 if (v != p) { |
50fb3fd79f76
Core: improved logging on invalid NGINX variable (ticket #900).
Maxim Dounin <mdounin@mdounin.ru>
parents:
6383
diff
changeset
|
507 ngx_log_error(NGX_LOG_EMERG, cycle->log, 0, |
50fb3fd79f76
Core: improved logging on invalid NGINX variable (ticket #900).
Maxim Dounin <mdounin@mdounin.ru>
parents:
6383
diff
changeset
|
508 "invalid socket number \"%s\" in " NGINX_VAR |
50fb3fd79f76
Core: improved logging on invalid NGINX variable (ticket #900).
Maxim Dounin <mdounin@mdounin.ru>
parents:
6383
diff
changeset
|
509 " environment variable, ignoring", v); |
50fb3fd79f76
Core: improved logging on invalid NGINX variable (ticket #900).
Maxim Dounin <mdounin@mdounin.ru>
parents:
6383
diff
changeset
|
510 } |
50fb3fd79f76
Core: improved logging on invalid NGINX variable (ticket #900).
Maxim Dounin <mdounin@mdounin.ru>
parents:
6383
diff
changeset
|
511 |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
512 ngx_inherited = 1; |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
513 |
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
514 return ngx_set_inherited_sockets(cycle); |
219
f57597ec5249
nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
515 } |
f57597ec5249
nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
516 |
f57597ec5249
nginx-0.0.1-2004-01-06-19:49:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
218
diff
changeset
|
517 |
1069 | 518 char ** |
519 ngx_set_environment(ngx_cycle_t *cycle, ngx_uint_t *last) | |
520 { | |
6822
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
521 char **p, **env; |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
522 ngx_str_t *var; |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
523 ngx_uint_t i, n; |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
524 ngx_core_conf_t *ccf; |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
525 ngx_pool_cleanup_t *cln; |
1069 | 526 |
527 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module); | |
528 | |
1080 | 529 if (last == NULL && ccf->environment) { |
530 return ccf->environment; | |
1069 | 531 } |
532 | |
533 var = ccf->env.elts; | |
534 | |
535 for (i = 0; i < ccf->env.nelts; i++) { | |
536 if (ngx_strcmp(var[i].data, "TZ") == 0 | |
537 || ngx_strncmp(var[i].data, "TZ=", 3) == 0) | |
538 { | |
539 goto tz_found; | |
540 } | |
541 } | |
542 | |
543 var = ngx_array_push(&ccf->env); | |
1318 | 544 if (var == NULL) { |
545 return NULL; | |
546 } | |
1069 | 547 |
548 var->len = 2; | |
549 var->data = (u_char *) "TZ"; | |
550 | |
551 var = ccf->env.elts; | |
552 | |
553 tz_found: | |
554 | |
1080 | 555 n = 0; |
556 | |
1069 | 557 for (i = 0; i < ccf->env.nelts; i++) { |
558 | |
559 if (var[i].data[var[i].len] == '=') { | |
560 n++; | |
561 continue; | |
562 } | |
563 | |
564 for (p = ngx_os_environ; *p; p++) { | |
565 | |
566 if (ngx_strncmp(*p, var[i].data, var[i].len) == 0 | |
567 && (*p)[var[i].len] == '=') | |
568 { | |
569 n++; | |
570 break; | |
571 } | |
572 } | |
573 } | |
574 | |
575 if (last) { | |
1080 | 576 env = ngx_alloc((*last + n + 1) * sizeof(char *), cycle->log); |
6822
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
577 if (env == NULL) { |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
578 return NULL; |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
579 } |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
580 |
1069 | 581 *last = n; |
582 | |
583 } else { | |
6822
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
584 cln = ngx_pool_cleanup_add(cycle->pool, 0); |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
585 if (cln == NULL) { |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
586 return NULL; |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
587 } |
1069 | 588 |
6822
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
589 env = ngx_alloc((n + 1) * sizeof(char *), cycle->log); |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
590 if (env == NULL) { |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
591 return NULL; |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
592 } |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
593 |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
594 cln->handler = ngx_cleanup_environment; |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
595 cln->data = env; |
1069 | 596 } |
597 | |
598 n = 0; | |
599 | |
600 for (i = 0; i < ccf->env.nelts; i++) { | |
601 | |
602 if (var[i].data[var[i].len] == '=') { | |
603 env[n++] = (char *) var[i].data; | |
604 continue; | |
605 } | |
606 | |
607 for (p = ngx_os_environ; *p; p++) { | |
608 | |
609 if (ngx_strncmp(*p, var[i].data, var[i].len) == 0 | |
610 && (*p)[var[i].len] == '=') | |
611 { | |
612 env[n++] = *p; | |
613 break; | |
614 } | |
615 } | |
616 } | |
617 | |
618 env[n] = NULL; | |
619 | |
620 if (last == NULL) { | |
621 ccf->environment = env; | |
622 environ = env; | |
623 } | |
624 | |
625 return env; | |
626 } | |
627 | |
628 | |
6822
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
629 static void |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
630 ngx_cleanup_environment(void *data) |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
631 { |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
632 char **env = data; |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
633 |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
634 if (environ == env) { |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
635 |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
636 /* |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
637 * if the environment is still used, as it happens on exit, |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
638 * the only option is to leak it |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
639 */ |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
640 |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
641 return; |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
642 } |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
643 |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
644 ngx_free(env); |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
645 } |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
646 |
c045b4926b2c
Core: fixed environment on exit.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6492
diff
changeset
|
647 |
543 | 648 ngx_pid_t |
649 ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv) | |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
650 { |
1069 | 651 char **env, *var; |
652 u_char *p; | |
653 ngx_uint_t i, n; | |
654 ngx_pid_t pid; | |
655 ngx_exec_ctx_t ctx; | |
656 ngx_core_conf_t *ccf; | |
657 ngx_listening_t *ls; | |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
658 |
2745
1983932b8075
pass command lines options to workers
Igor Sysoev <igor@sysoev.ru>
parents:
2743
diff
changeset
|
659 ngx_memzero(&ctx, sizeof(ngx_exec_ctx_t)); |
1983932b8075
pass command lines options to workers
Igor Sysoev <igor@sysoev.ru>
parents:
2743
diff
changeset
|
660 |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
661 ctx.path = argv[0]; |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
662 ctx.name = "new binary process"; |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
663 ctx.argv = argv; |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
664 |
1069 | 665 n = 2; |
666 env = ngx_set_environment(cycle, &n); | |
667 if (env == NULL) { | |
668 return NGX_INVALID_PID; | |
669 } | |
670 | |
282
30310107dbc9
nginx-0.0.2-2004-03-09-22:47:07 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
671 var = ngx_alloc(sizeof(NGINX_VAR) |
501 | 672 + cycle->listening.nelts * (NGX_INT32_LEN + 1) + 2, |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
673 cycle->log); |
5116
4d7027deb1bb
Core: guard against failed allocation during binary upgrade.
Ruslan Ermilov <ru@nginx.com>
parents:
4890
diff
changeset
|
674 if (var == NULL) { |
5122
3450eee1ee8d
Core: fixed resource leak if binary upgrade fails due to no memory.
Ruslan Ermilov <ru@nginx.com>
parents:
5116
diff
changeset
|
675 ngx_free(env); |
5116
4d7027deb1bb
Core: guard against failed allocation during binary upgrade.
Ruslan Ermilov <ru@nginx.com>
parents:
4890
diff
changeset
|
676 return NGX_INVALID_PID; |
4d7027deb1bb
Core: guard against failed allocation during binary upgrade.
Ruslan Ermilov <ru@nginx.com>
parents:
4890
diff
changeset
|
677 } |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
678 |
461 | 679 p = ngx_cpymem(var, NGINX_VAR "=", sizeof(NGINX_VAR)); |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
680 |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
681 ls = cycle->listening.elts; |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
682 for (i = 0; i < cycle->listening.nelts; i++) { |
461 | 683 p = ngx_sprintf(p, "%ud;", ls[i].fd); |
114
ac69ab96328d
nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
113
diff
changeset
|
684 } |
ac69ab96328d
nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
113
diff
changeset
|
685 |
461 | 686 *p = '\0'; |
687 | |
1069 | 688 env[n++] = var; |
452 | 689 |
690 #if (NGX_SETPROCTITLE_USES_ENV) | |
691 | |
461 | 692 /* allocate the spare 300 bytes for the new binary process title */ |
452 | 693 |
1069 | 694 env[n++] = "SPARE=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" |
695 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" | |
696 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" | |
697 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" | |
698 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; | |
452 | 699 |
700 #endif | |
701 | |
1069 | 702 env[n] = NULL; |
703 | |
704 #if (NGX_DEBUG) | |
705 { | |
706 char **e; | |
707 for (e = env; *e; e++) { | |
708 ngx_log_debug1(NGX_LOG_DEBUG_CORE, cycle->log, 0, "env: %s", *e); | |
709 } | |
710 } | |
711 #endif | |
712 | |
713 ctx.envp = (char *const *) env; | |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
714 |
543 | 715 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module); |
716 | |
5137
f941cf265cc5
Use NGX_FILE_ERROR for handling file operations errors.
Valentin Bartenev <vbart@nginx.com>
parents:
5122
diff
changeset
|
717 if (ngx_rename_file(ccf->pid.data, ccf->oldpid.data) == NGX_FILE_ERROR) { |
543 | 718 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
719 ngx_rename_file_n " %s to %s failed " | |
720 "before executing new binary process \"%s\"", | |
721 ccf->pid.data, ccf->oldpid.data, argv[0]); | |
722 | |
1069 | 723 ngx_free(env); |
543 | 724 ngx_free(var); |
725 | |
726 return NGX_INVALID_PID; | |
727 } | |
728 | |
279
b79f021a644a
nginx-0.0.2-2004-03-04-19:34:23 import
Igor Sysoev <igor@sysoev.ru>
parents:
278
diff
changeset
|
729 pid = ngx_execute(cycle, &ctx); |
114
ac69ab96328d
nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
113
diff
changeset
|
730 |
543 | 731 if (pid == NGX_INVALID_PID) { |
5137
f941cf265cc5
Use NGX_FILE_ERROR for handling file operations errors.
Valentin Bartenev <vbart@nginx.com>
parents:
5122
diff
changeset
|
732 if (ngx_rename_file(ccf->oldpid.data, ccf->pid.data) |
f941cf265cc5
Use NGX_FILE_ERROR for handling file operations errors.
Valentin Bartenev <vbart@nginx.com>
parents:
5122
diff
changeset
|
733 == NGX_FILE_ERROR) |
f941cf265cc5
Use NGX_FILE_ERROR for handling file operations errors.
Valentin Bartenev <vbart@nginx.com>
parents:
5122
diff
changeset
|
734 { |
543 | 735 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
1069 | 736 ngx_rename_file_n " %s back to %s failed after " |
4593
834049edae24
Fixed grammar in error messages.
Ruslan Ermilov <ru@nginx.com>
parents:
4549
diff
changeset
|
737 "an attempt to execute new binary process \"%s\"", |
543 | 738 ccf->oldpid.data, ccf->pid.data, argv[0]); |
739 } | |
740 } | |
741 | |
1069 | 742 ngx_free(env); |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
743 ngx_free(var); |
226
b0c1e21e68db
nginx-0.0.1-2004-01-14-00:33:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
225
diff
changeset
|
744 |
b0c1e21e68db
nginx-0.0.1-2004-01-14-00:33:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
225
diff
changeset
|
745 return pid; |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
746 } |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
747 |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
748 |
543 | 749 static ngx_int_t |
2730
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
750 ngx_get_options(int argc, char *const *argv) |
255
e6938ca7331a
nginx-0.0.2-2004-02-09-23:47:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
253
diff
changeset
|
751 { |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
752 u_char *p; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
753 ngx_int_t i; |
255
e6938ca7331a
nginx-0.0.2-2004-02-09-23:47:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
253
diff
changeset
|
754 |
452 | 755 for (i = 1; i < argc; i++) { |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
756 |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
757 p = (u_char *) argv[i]; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
758 |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
759 if (*p++ != '-') { |
2743
d8316f307b6a
issue start up errors and warning on both stderr and error_log
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
760 ngx_log_stderr(0, "invalid option: \"%s\"", argv[i]); |
255
e6938ca7331a
nginx-0.0.2-2004-02-09-23:47:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
253
diff
changeset
|
761 return NGX_ERROR; |
e6938ca7331a
nginx-0.0.2-2004-02-09-23:47:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
253
diff
changeset
|
762 } |
e6938ca7331a
nginx-0.0.2-2004-02-09-23:47:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
253
diff
changeset
|
763 |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
764 while (*p) { |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
765 |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
766 switch (*p++) { |
255
e6938ca7331a
nginx-0.0.2-2004-02-09-23:47:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
253
diff
changeset
|
767 |
2735 | 768 case '?': |
769 case 'h': | |
770 ngx_show_version = 1; | |
771 ngx_show_help = 1; | |
772 break; | |
773 | |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
774 case 'v': |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
775 ngx_show_version = 1; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
776 break; |
639 | 777 |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
778 case 'V': |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
779 ngx_show_version = 1; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
780 ngx_show_configure = 1; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
781 break; |
945 | 782 |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
783 case 't': |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
784 ngx_test_config = 1; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
785 break; |
317
1308b98496a2
nginx-0.0.3-2004-04-15-19:34:36 import
Igor Sysoev <igor@sysoev.ru>
parents:
316
diff
changeset
|
786 |
6187
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
787 case 'T': |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
788 ngx_test_config = 1; |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
789 ngx_dump_config = 1; |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
790 break; |
1b7e246e6b38
Core: store and dump processed configuration.
Vladimir Homutov <vl@nginx.com>
parents:
6127
diff
changeset
|
791 |
3750 | 792 case 'q': |
793 ngx_quiet_mode = 1; | |
794 break; | |
795 | |
2758 | 796 case 'p': |
797 if (*p) { | |
798 ngx_prefix = p; | |
799 goto next; | |
800 } | |
801 | |
802 if (argv[++i]) { | |
803 ngx_prefix = (u_char *) argv[i]; | |
804 goto next; | |
805 } | |
806 | |
807 ngx_log_stderr(0, "option \"-p\" requires directory name"); | |
808 return NGX_ERROR; | |
809 | |
7744
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
810 case 'e': |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
811 if (*p) { |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
812 ngx_error_log = p; |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
813 |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
814 } else if (argv[++i]) { |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
815 ngx_error_log = (u_char *) argv[i]; |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
816 |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
817 } else { |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
818 ngx_log_stderr(0, "option \"-e\" requires file name"); |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
819 return NGX_ERROR; |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
820 } |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
821 |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
822 if (ngx_strcmp(ngx_error_log, "stderr") == 0) { |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
823 ngx_error_log = (u_char *) ""; |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
824 } |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
825 |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
826 goto next; |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
827 |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
828 case 'c': |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
829 if (*p) { |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
830 ngx_conf_file = p; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
831 goto next; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
832 } |
316
a0beefedaf94
nginx-0.0.3-2004-04-15-00:34:05 import
Igor Sysoev <igor@sysoev.ru>
parents:
314
diff
changeset
|
833 |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
834 if (argv[++i]) { |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
835 ngx_conf_file = (u_char *) argv[i]; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
836 goto next; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
837 } |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
838 |
2743
d8316f307b6a
issue start up errors and warning on both stderr and error_log
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
839 ngx_log_stderr(0, "option \"-c\" requires file name"); |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
840 return NGX_ERROR; |
255
e6938ca7331a
nginx-0.0.2-2004-02-09-23:47:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
253
diff
changeset
|
841 |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
842 case 'g': |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
843 if (*p) { |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
844 ngx_conf_params = p; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
845 goto next; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
846 } |
2073 | 847 |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
848 if (argv[++i]) { |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
849 ngx_conf_params = (u_char *) argv[i]; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
850 goto next; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
851 } |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
852 |
2743
d8316f307b6a
issue start up errors and warning on both stderr and error_log
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
853 ngx_log_stderr(0, "option \"-g\" requires parameter"); |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
854 return NGX_ERROR; |
2073 | 855 |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
856 case 's': |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
857 if (*p) { |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
858 ngx_signal = (char *) p; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
859 |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
860 } else if (argv[++i]) { |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
861 ngx_signal = argv[i]; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
862 |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
863 } else { |
2743
d8316f307b6a
issue start up errors and warning on both stderr and error_log
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
864 ngx_log_stderr(0, "option \"-s\" requires parameter"); |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
865 return NGX_ERROR; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
866 } |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
867 |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
868 if (ngx_strcmp(ngx_signal, "stop") == 0 |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
869 || ngx_strcmp(ngx_signal, "quit") == 0 |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
870 || ngx_strcmp(ngx_signal, "reopen") == 0 |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
871 || ngx_strcmp(ngx_signal, "reload") == 0) |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
872 { |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
873 ngx_process = NGX_PROCESS_SIGNALLER; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
874 goto next; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
875 } |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
876 |
2743
d8316f307b6a
issue start up errors and warning on both stderr and error_log
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
877 ngx_log_stderr(0, "invalid option: \"-s %s\"", ngx_signal); |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
878 return NGX_ERROR; |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
879 |
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
880 default: |
2743
d8316f307b6a
issue start up errors and warning on both stderr and error_log
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
881 ngx_log_stderr(0, "invalid option: \"%c\"", *(p - 1)); |
2725 | 882 return NGX_ERROR; |
883 } | |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
884 } |
2725 | 885 |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
886 next: |
2725 | 887 |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
888 continue; |
255
e6938ca7331a
nginx-0.0.2-2004-02-09-23:47:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
253
diff
changeset
|
889 } |
e6938ca7331a
nginx-0.0.2-2004-02-09-23:47:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
253
diff
changeset
|
890 |
e6938ca7331a
nginx-0.0.2-2004-02-09-23:47:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
253
diff
changeset
|
891 return NGX_OK; |
e6938ca7331a
nginx-0.0.2-2004-02-09-23:47:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
253
diff
changeset
|
892 } |
e6938ca7331a
nginx-0.0.2-2004-02-09-23:47:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
253
diff
changeset
|
893 |
e6938ca7331a
nginx-0.0.2-2004-02-09-23:47:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
253
diff
changeset
|
894 |
499 | 895 static ngx_int_t |
896 ngx_save_argv(ngx_cycle_t *cycle, int argc, char *const *argv) | |
452 | 897 { |
501 | 898 #if (NGX_FREEBSD) |
899 | |
900 ngx_os_argv = (char **) argv; | |
901 ngx_argc = argc; | |
902 ngx_argv = (char **) argv; | |
903 | |
904 #else | |
452 | 905 size_t len; |
906 ngx_int_t i; | |
907 | |
908 ngx_os_argv = (char **) argv; | |
909 ngx_argc = argc; | |
910 | |
501 | 911 ngx_argv = ngx_alloc((argc + 1) * sizeof(char *), cycle->log); |
912 if (ngx_argv == NULL) { | |
452 | 913 return NGX_ERROR; |
914 } | |
915 | |
916 for (i = 0; i < argc; i++) { | |
917 len = ngx_strlen(argv[i]) + 1; | |
918 | |
501 | 919 ngx_argv[i] = ngx_alloc(len, cycle->log); |
920 if (ngx_argv[i] == NULL) { | |
452 | 921 return NGX_ERROR; |
922 } | |
923 | |
517 | 924 (void) ngx_cpystrn((u_char *) ngx_argv[i], (u_char *) argv[i], len); |
452 | 925 } |
926 | |
927 ngx_argv[i] = NULL; | |
928 | |
929 #endif | |
930 | |
1069 | 931 ngx_os_environ = environ; |
932 | |
452 | 933 return NGX_OK; |
934 } | |
935 | |
936 | |
2758 | 937 static ngx_int_t |
2730
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
938 ngx_process_options(ngx_cycle_t *cycle) |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
939 { |
2758 | 940 u_char *p; |
941 size_t len; | |
942 | |
943 if (ngx_prefix) { | |
944 len = ngx_strlen(ngx_prefix); | |
945 p = ngx_prefix; | |
946 | |
4783
2220ce29b9d3
Fixed the -p parameter handling.
Ruslan Ermilov <ru@nginx.com>
parents:
4593
diff
changeset
|
947 if (len && !ngx_path_separator(p[len - 1])) { |
2758 | 948 p = ngx_pnalloc(cycle->pool, len + 1); |
949 if (p == NULL) { | |
950 return NGX_ERROR; | |
951 } | |
952 | |
953 ngx_memcpy(p, ngx_prefix, len); | |
954 p[len++] = '/'; | |
955 } | |
956 | |
957 cycle->conf_prefix.len = len; | |
958 cycle->conf_prefix.data = p; | |
959 cycle->prefix.len = len; | |
960 cycle->prefix.data = p; | |
961 | |
962 } else { | |
963 | |
964 #ifndef NGX_PREFIX | |
965 | |
966 p = ngx_pnalloc(cycle->pool, NGX_MAX_PATH); | |
967 if (p == NULL) { | |
968 return NGX_ERROR; | |
969 } | |
970 | |
971 if (ngx_getcwd(p, NGX_MAX_PATH) == 0) { | |
972 ngx_log_stderr(ngx_errno, "[emerg]: " ngx_getcwd_n " failed"); | |
973 return NGX_ERROR; | |
974 } | |
975 | |
976 len = ngx_strlen(p); | |
977 | |
978 p[len++] = '/'; | |
979 | |
980 cycle->conf_prefix.len = len; | |
981 cycle->conf_prefix.data = p; | |
982 cycle->prefix.len = len; | |
983 cycle->prefix.data = p; | |
984 | |
985 #else | |
986 | |
987 #ifdef NGX_CONF_PREFIX | |
3516
dd1570b6f237
ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents:
3480
diff
changeset
|
988 ngx_str_set(&cycle->conf_prefix, NGX_CONF_PREFIX); |
2758 | 989 #else |
3516
dd1570b6f237
ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents:
3480
diff
changeset
|
990 ngx_str_set(&cycle->conf_prefix, NGX_PREFIX); |
2758 | 991 #endif |
3516
dd1570b6f237
ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents:
3480
diff
changeset
|
992 ngx_str_set(&cycle->prefix, NGX_PREFIX); |
2758 | 993 |
994 #endif | |
995 } | |
996 | |
2730
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
997 if (ngx_conf_file) { |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
998 cycle->conf_file.len = ngx_strlen(ngx_conf_file); |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
999 cycle->conf_file.data = ngx_conf_file; |
2730
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
1000 |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
1001 } else { |
3516
dd1570b6f237
ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents:
3480
diff
changeset
|
1002 ngx_str_set(&cycle->conf_file, NGX_CONF_PATH); |
2730
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
1003 } |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
1004 |
5330
314c3d7cc3a5
Backed out f1a91825730a and 7094bd12c1ff.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5317
diff
changeset
|
1005 if (ngx_conf_full_name(cycle, &cycle->conf_file, 0) != NGX_OK) { |
2758 | 1006 return NGX_ERROR; |
1007 } | |
1008 | |
1009 for (p = cycle->conf_file.data + cycle->conf_file.len - 1; | |
1010 p > cycle->conf_file.data; | |
1011 p--) | |
1012 { | |
1013 if (ngx_path_separator(*p)) { | |
7248
fdd6a070d518
Improved code readability (closes #1512).
Ruslan Ermilov <ru@nginx.com>
parents:
7162
diff
changeset
|
1014 cycle->conf_prefix.len = p - cycle->conf_file.data + 1; |
fdd6a070d518
Improved code readability (closes #1512).
Ruslan Ermilov <ru@nginx.com>
parents:
7162
diff
changeset
|
1015 cycle->conf_prefix.data = cycle->conf_file.data; |
2758 | 1016 break; |
1017 } | |
1018 } | |
1019 | |
7744
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
1020 if (ngx_error_log) { |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
1021 cycle->error_log.len = ngx_strlen(ngx_error_log); |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
1022 cycle->error_log.data = ngx_error_log; |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
1023 |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
1024 } else { |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
1025 ngx_str_set(&cycle->error_log, NGX_ERROR_LOG_PATH); |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
1026 } |
f18db38a9826
Core: "-e" command line option.
Igor Ippolitov <iippolitov@nginx.com>
parents:
7662
diff
changeset
|
1027 |
2730
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
1028 if (ngx_conf_params) { |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
1029 cycle->conf_param.len = ngx_strlen(ngx_conf_params); |
2733
edc01cc34b3e
allow condensed command lines options
Igor Sysoev <igor@sysoev.ru>
parents:
2730
diff
changeset
|
1030 cycle->conf_param.data = ngx_conf_params; |
2730
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
1031 } |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
1032 |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
1033 if (ngx_test_config) { |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
1034 cycle->log->log_level = NGX_LOG_INFO; |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
1035 } |
2758 | 1036 |
1037 return NGX_OK; | |
2730
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
1038 } |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
1039 |
95a17423afdb
test command line options before ngx_log_init() and issue errors to stderr
Igor Sysoev <igor@sysoev.ru>
parents:
2725
diff
changeset
|
1040 |
499 | 1041 static void * |
1042 ngx_core_module_create_conf(ngx_cycle_t *cycle) | |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
1043 { |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
1044 ngx_core_conf_t *ccf; |
114
ac69ab96328d
nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
113
diff
changeset
|
1045 |
501 | 1046 ccf = ngx_pcalloc(cycle->pool, sizeof(ngx_core_conf_t)); |
1047 if (ccf == NULL) { | |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
1048 return NULL; |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
1049 } |
479 | 1050 |
1051 /* | |
3480 | 1052 * set by ngx_pcalloc() |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
1053 * |
479 | 1054 * ccf->pid = NULL; |
543 | 1055 * ccf->oldpid = NULL; |
479 | 1056 * ccf->priority = 0; |
6335
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1057 * ccf->cpu_affinity_auto = 0; |
577 | 1058 * ccf->cpu_affinity_n = 0; |
1059 * ccf->cpu_affinity = NULL; | |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
1060 */ |
479 | 1061 |
234
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1062 ccf->daemon = NGX_CONF_UNSET; |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1063 ccf->master = NGX_CONF_UNSET; |
563 | 1064 ccf->timer_resolution = NGX_CONF_UNSET_MSEC; |
6930
97c99bb43737
Introduced worker_shutdown_timeout.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6822
diff
changeset
|
1065 ccf->shutdown_timeout = NGX_CONF_UNSET_MSEC; |
563 | 1066 |
300
502b03d9d2a3
nginx-0.0.3-2004-03-31-00:31:58 import
Igor Sysoev <igor@sysoev.ru>
parents:
290
diff
changeset
|
1067 ccf->worker_processes = NGX_CONF_UNSET; |
461 | 1068 ccf->debug_points = NGX_CONF_UNSET; |
543 | 1069 |
1070 ccf->rlimit_nofile = NGX_CONF_UNSET; | |
3762
89002ac695e5
worker_rlimit_core should be off_t
Igor Sysoev <igor@sysoev.ru>
parents:
3750
diff
changeset
|
1071 ccf->rlimit_core = NGX_CONF_UNSET; |
543 | 1072 |
517 | 1073 ccf->user = (ngx_uid_t) NGX_CONF_UNSET_UINT; |
1074 ccf->group = (ngx_gid_t) NGX_CONF_UNSET_UINT; | |
543 | 1075 |
1069 | 1076 if (ngx_array_init(&ccf->env, cycle->pool, 1, sizeof(ngx_str_t)) |
1077 != NGX_OK) | |
1078 { | |
1079 return NULL; | |
1080 } | |
1081 | |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
1082 return ccf; |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
1083 } |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
1084 |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
1085 |
499 | 1086 static char * |
1087 ngx_core_module_init_conf(ngx_cycle_t *cycle, void *conf) | |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
1088 { |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
1089 ngx_core_conf_t *ccf = conf; |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
1090 |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
1091 ngx_conf_init_value(ccf->daemon, 1); |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
1092 ngx_conf_init_value(ccf->master, 1); |
563 | 1093 ngx_conf_init_msec_value(ccf->timer_resolution, 0); |
6930
97c99bb43737
Introduced worker_shutdown_timeout.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6822
diff
changeset
|
1094 ngx_conf_init_msec_value(ccf->shutdown_timeout, 0); |
563 | 1095 |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
1096 ngx_conf_init_value(ccf->worker_processes, 1); |
461 | 1097 ngx_conf_init_value(ccf->debug_points, 0); |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
1098 |
4549
f31162fefe01
worker_cpu_affinity: cleaned up Linux implementation, added FreeBSD support.
Ruslan Ermilov <ru@nginx.com>
parents:
4412
diff
changeset
|
1099 #if (NGX_HAVE_CPU_AFFINITY) |
577 | 1100 |
6335
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1101 if (!ccf->cpu_affinity_auto |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1102 && ccf->cpu_affinity_n |
577 | 1103 && ccf->cpu_affinity_n != 1 |
1104 && ccf->cpu_affinity_n != (ngx_uint_t) ccf->worker_processes) | |
1105 { | |
1106 ngx_log_error(NGX_LOG_WARN, cycle->log, 0, | |
4549
f31162fefe01
worker_cpu_affinity: cleaned up Linux implementation, added FreeBSD support.
Ruslan Ermilov <ru@nginx.com>
parents:
4412
diff
changeset
|
1107 "the number of \"worker_processes\" is not equal to " |
f31162fefe01
worker_cpu_affinity: cleaned up Linux implementation, added FreeBSD support.
Ruslan Ermilov <ru@nginx.com>
parents:
4412
diff
changeset
|
1108 "the number of \"worker_cpu_affinity\" masks, " |
577 | 1109 "using last mask for remaining worker processes"); |
1110 } | |
1111 | |
1112 #endif | |
1113 | |
2725 | 1114 |
1115 if (ccf->pid.len == 0) { | |
3516
dd1570b6f237
ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents:
3480
diff
changeset
|
1116 ngx_str_set(&ccf->pid, NGX_PID_PATH); |
2725 | 1117 } |
1118 | |
5330
314c3d7cc3a5
Backed out f1a91825730a and 7094bd12c1ff.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5317
diff
changeset
|
1119 if (ngx_conf_full_name(cycle, &ccf->pid, 0) != NGX_OK) { |
2725 | 1120 return NGX_CONF_ERROR; |
1121 } | |
1122 | |
1123 ccf->oldpid.len = ccf->pid.len + sizeof(NGX_OLDPID_EXT); | |
1124 | |
1125 ccf->oldpid.data = ngx_pnalloc(cycle->pool, ccf->oldpid.len); | |
1126 if (ccf->oldpid.data == NULL) { | |
1127 return NGX_CONF_ERROR; | |
1128 } | |
1129 | |
1130 ngx_memcpy(ngx_cpymem(ccf->oldpid.data, ccf->pid.data, ccf->pid.len), | |
1131 NGX_OLDPID_EXT, sizeof(NGX_OLDPID_EXT)); | |
1132 | |
1133 | |
461 | 1134 #if !(NGX_WIN32) |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
1135 |
517 | 1136 if (ccf->user == (uid_t) NGX_CONF_UNSET_UINT && geteuid() == 0) { |
1704
e584e946e198
move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents:
1694
diff
changeset
|
1137 struct group *grp; |
e584e946e198
move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents:
1694
diff
changeset
|
1138 struct passwd *pwd; |
440
f390d1775430
nginx-0.1.0-2004-09-27-20:03:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
409
diff
changeset
|
1139 |
1288 | 1140 ngx_set_errno(0); |
455 | 1141 pwd = getpwnam(NGX_USER); |
440
f390d1775430
nginx-0.1.0-2004-09-27-20:03:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
409
diff
changeset
|
1142 if (pwd == NULL) { |
f390d1775430
nginx-0.1.0-2004-09-27-20:03:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
409
diff
changeset
|
1143 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, |
455 | 1144 "getpwnam(\"" NGX_USER "\") failed"); |
440
f390d1775430
nginx-0.1.0-2004-09-27-20:03:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
409
diff
changeset
|
1145 return NGX_CONF_ERROR; |
f390d1775430
nginx-0.1.0-2004-09-27-20:03:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
409
diff
changeset
|
1146 } |
f390d1775430
nginx-0.1.0-2004-09-27-20:03:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
409
diff
changeset
|
1147 |
473 | 1148 ccf->username = NGX_USER; |
440
f390d1775430
nginx-0.1.0-2004-09-27-20:03:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
409
diff
changeset
|
1149 ccf->user = pwd->pw_uid; |
f390d1775430
nginx-0.1.0-2004-09-27-20:03:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
409
diff
changeset
|
1150 |
1288 | 1151 ngx_set_errno(0); |
455 | 1152 grp = getgrnam(NGX_GROUP); |
440
f390d1775430
nginx-0.1.0-2004-09-27-20:03:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
409
diff
changeset
|
1153 if (grp == NULL) { |
f390d1775430
nginx-0.1.0-2004-09-27-20:03:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
409
diff
changeset
|
1154 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, |
455 | 1155 "getgrnam(\"" NGX_GROUP "\") failed"); |
440
f390d1775430
nginx-0.1.0-2004-09-27-20:03:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
409
diff
changeset
|
1156 return NGX_CONF_ERROR; |
f390d1775430
nginx-0.1.0-2004-09-27-20:03:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
409
diff
changeset
|
1157 } |
f390d1775430
nginx-0.1.0-2004-09-27-20:03:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
409
diff
changeset
|
1158 |
f390d1775430
nginx-0.1.0-2004-09-27-20:03:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
409
diff
changeset
|
1159 ccf->group = grp->gr_gid; |
f390d1775430
nginx-0.1.0-2004-09-27-20:03:21 import
Igor Sysoev <igor@sysoev.ru>
parents:
409
diff
changeset
|
1160 } |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
217
diff
changeset
|
1161 |
860
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1162 |
611 | 1163 if (ccf->lock_file.len == 0) { |
3516
dd1570b6f237
ngx_str_set() and ngx_str_null()
Igor Sysoev <igor@sysoev.ru>
parents:
3480
diff
changeset
|
1164 ngx_str_set(&ccf->lock_file, NGX_LOCK_PATH); |
611 | 1165 } |
1166 | |
5330
314c3d7cc3a5
Backed out f1a91825730a and 7094bd12c1ff.
Maxim Dounin <mdounin@mdounin.ru>
parents:
5317
diff
changeset
|
1167 if (ngx_conf_full_name(cycle, &ccf->lock_file, 0) != NGX_OK) { |
611 | 1168 return NGX_CONF_ERROR; |
1169 } | |
1170 | |
1704
e584e946e198
move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents:
1694
diff
changeset
|
1171 { |
e584e946e198
move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents:
1694
diff
changeset
|
1172 ngx_str_t lock_file; |
e584e946e198
move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents:
1694
diff
changeset
|
1173 |
860
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1174 lock_file = cycle->old_cycle->lock_file; |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1175 |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1176 if (lock_file.len) { |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1177 lock_file.len--; |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1178 |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1179 if (ccf->lock_file.len != lock_file.len |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1180 || ngx_strncmp(ccf->lock_file.data, lock_file.data, lock_file.len) |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1181 != 0) |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1182 { |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1183 ngx_log_error(NGX_LOG_EMERG, cycle->log, 0, |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1184 "\"lock_file\" could not be changed, ignored"); |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1185 } |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1186 |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1187 cycle->lock_file.len = lock_file.len + 1; |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1188 lock_file.len += sizeof(".accept"); |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1189 |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1190 cycle->lock_file.data = ngx_pstrdup(cycle->pool, &lock_file); |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1191 if (cycle->lock_file.data == NULL) { |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1192 return NGX_CONF_ERROR; |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1193 } |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1194 |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1195 } else { |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1196 cycle->lock_file.len = ccf->lock_file.len + 1; |
2049 | 1197 cycle->lock_file.data = ngx_pnalloc(cycle->pool, |
860
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1198 ccf->lock_file.len + sizeof(".accept")); |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1199 if (cycle->lock_file.data == NULL) { |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1200 return NGX_CONF_ERROR; |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1201 } |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1202 |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1203 ngx_memcpy(ngx_cpymem(cycle->lock_file.data, ccf->lock_file.data, |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1204 ccf->lock_file.len), |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1205 ".accept", sizeof(".accept")); |
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1206 } |
1704
e584e946e198
move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents:
1694
diff
changeset
|
1207 } |
860
201d017ea470
slab allocator in shared memory
Igor Sysoev <igor@sysoev.ru>
parents:
796
diff
changeset
|
1208 |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
1209 #endif |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
1210 |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
1211 return NGX_CONF_OK; |
114
ac69ab96328d
nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
113
diff
changeset
|
1212 } |
234
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1213 |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1214 |
499 | 1215 static char * |
1216 ngx_set_user(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) | |
234
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1217 { |
461 | 1218 #if (NGX_WIN32) |
278
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
270
diff
changeset
|
1219 |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
270
diff
changeset
|
1220 ngx_conf_log_error(NGX_LOG_WARN, cf, 0, |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
270
diff
changeset
|
1221 "\"user\" is not supported, ignored"); |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
270
diff
changeset
|
1222 |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
270
diff
changeset
|
1223 return NGX_CONF_OK; |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
270
diff
changeset
|
1224 |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
270
diff
changeset
|
1225 #else |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
270
diff
changeset
|
1226 |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
1227 ngx_core_conf_t *ccf = conf; |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
310
diff
changeset
|
1228 |
455 | 1229 char *group; |
234
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1230 struct passwd *pwd; |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1231 struct group *grp; |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1232 ngx_str_t *value; |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1233 |
517 | 1234 if (ccf->user != (uid_t) NGX_CONF_UNSET_UINT) { |
234
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1235 return "is duplicate"; |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1236 } |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1237 |
455 | 1238 if (geteuid() != 0) { |
1239 ngx_conf_log_error(NGX_LOG_WARN, cf, 0, | |
1240 "the \"user\" directive makes sense only " | |
1241 "if the master process runs " | |
1242 "with super-user privileges, ignored"); | |
1243 return NGX_CONF_OK; | |
1244 } | |
1245 | |
6264
7ac57369036c
Style: unneeded casts of cf->args->elts removed.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6257
diff
changeset
|
1246 value = cf->args->elts; |
234
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1247 |
473 | 1248 ccf->username = (char *) value[1].data; |
1249 | |
1288 | 1250 ngx_set_errno(0); |
290
87e73f067470
nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
289
diff
changeset
|
1251 pwd = getpwnam((const char *) value[1].data); |
234
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1252 if (pwd == NULL) { |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1253 ngx_conf_log_error(NGX_LOG_EMERG, cf, ngx_errno, |
452 | 1254 "getpwnam(\"%s\") failed", value[1].data); |
234
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1255 return NGX_CONF_ERROR; |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1256 } |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1257 |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1258 ccf->user = pwd->pw_uid; |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1259 |
455 | 1260 group = (char *) ((cf->args->nelts == 2) ? value[1].data : value[2].data); |
234
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1261 |
1288 | 1262 ngx_set_errno(0); |
455 | 1263 grp = getgrnam(group); |
234
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1264 if (grp == NULL) { |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1265 ngx_conf_log_error(NGX_LOG_EMERG, cf, ngx_errno, |
455 | 1266 "getgrnam(\"%s\") failed", group); |
234
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1267 return NGX_CONF_ERROR; |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1268 } |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1269 |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1270 ccf->group = grp->gr_gid; |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1271 |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1272 return NGX_CONF_OK; |
278
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
270
diff
changeset
|
1273 |
0ba4821f4460
nginx-0.0.2-2004-03-04-10:04:55 import
Igor Sysoev <igor@sysoev.ru>
parents:
270
diff
changeset
|
1274 #endif |
234
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
231
diff
changeset
|
1275 } |
473 | 1276 |
1277 | |
499 | 1278 static char * |
1069 | 1279 ngx_set_env(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) |
1280 { | |
1281 ngx_core_conf_t *ccf = conf; | |
1282 | |
1283 ngx_str_t *value, *var; | |
1284 ngx_uint_t i; | |
1285 | |
1286 var = ngx_array_push(&ccf->env); | |
1287 if (var == NULL) { | |
1288 return NGX_CONF_ERROR; | |
1289 } | |
1290 | |
1291 value = cf->args->elts; | |
1292 *var = value[1]; | |
1293 | |
1294 for (i = 0; i < value[1].len; i++) { | |
1295 | |
1296 if (value[1].data[i] == '=') { | |
1297 | |
1298 var->len = i; | |
1299 | |
1300 return NGX_CONF_OK; | |
1301 } | |
1302 } | |
1303 | |
1304 return NGX_CONF_OK; | |
1305 } | |
1306 | |
1307 | |
1308 static char * | |
499 | 1309 ngx_set_priority(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) |
473 | 1310 { |
1311 ngx_core_conf_t *ccf = conf; | |
1312 | |
1313 ngx_str_t *value; | |
1314 ngx_uint_t n, minus; | |
1315 | |
1316 if (ccf->priority != 0) { | |
1317 return "is duplicate"; | |
1318 } | |
1319 | |
1320 value = cf->args->elts; | |
1321 | |
1322 if (value[1].data[0] == '-') { | |
1323 n = 1; | |
1324 minus = 1; | |
1325 | |
1326 } else if (value[1].data[0] == '+') { | |
1327 n = 1; | |
1328 minus = 0; | |
1329 | |
1330 } else { | |
1331 n = 0; | |
1332 minus = 0; | |
1333 } | |
1334 | |
1335 ccf->priority = ngx_atoi(&value[1].data[n], value[1].len - n); | |
1336 if (ccf->priority == NGX_ERROR) { | |
1337 return "invalid number"; | |
1338 } | |
1339 | |
1340 if (minus) { | |
1341 ccf->priority = -ccf->priority; | |
1342 } | |
1343 | |
1344 return NGX_CONF_OK; | |
1345 } | |
577 | 1346 |
1347 | |
1348 static char * | |
1349 ngx_set_cpu_affinity(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) | |
1350 { | |
4549
f31162fefe01
worker_cpu_affinity: cleaned up Linux implementation, added FreeBSD support.
Ruslan Ermilov <ru@nginx.com>
parents:
4412
diff
changeset
|
1351 #if (NGX_HAVE_CPU_AFFINITY) |
577 | 1352 ngx_core_conf_t *ccf = conf; |
1353 | |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1354 u_char ch, *p; |
577 | 1355 ngx_str_t *value; |
1356 ngx_uint_t i, n; | |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1357 ngx_cpuset_t *mask; |
577 | 1358 |
1359 if (ccf->cpu_affinity) { | |
1360 return "is duplicate"; | |
1361 } | |
1362 | |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1363 mask = ngx_palloc(cf->pool, (cf->args->nelts - 1) * sizeof(ngx_cpuset_t)); |
577 | 1364 if (mask == NULL) { |
1365 return NGX_CONF_ERROR; | |
1366 } | |
1367 | |
1368 ccf->cpu_affinity_n = cf->args->nelts - 1; | |
1369 ccf->cpu_affinity = mask; | |
1370 | |
1371 value = cf->args->elts; | |
1372 | |
6335
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1373 if (ngx_strcmp(value[1].data, "auto") == 0) { |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1374 |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1375 if (cf->args->nelts > 3) { |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1376 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1377 "invalid number of arguments in " |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1378 "\"worker_cpu_affinity\" directive"); |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1379 return NGX_CONF_ERROR; |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1380 } |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1381 |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1382 ccf->cpu_affinity_auto = 1; |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1383 |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1384 CPU_ZERO(&mask[0]); |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1385 for (i = 0; i < (ngx_uint_t) ngx_min(ngx_ncpu, CPU_SETSIZE); i++) { |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1386 CPU_SET(i, &mask[0]); |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1387 } |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1388 |
6335
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1389 n = 2; |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1390 |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1391 } else { |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1392 n = 1; |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1393 } |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1394 |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1395 for ( /* void */ ; n < cf->args->nelts; n++) { |
577 | 1396 |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1397 if (value[n].len > CPU_SETSIZE) { |
577 | 1398 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1399 "\"worker_cpu_affinity\" supports up to %d CPUs only", |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1400 CPU_SETSIZE); |
577 | 1401 return NGX_CONF_ERROR; |
1402 } | |
1403 | |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1404 i = 0; |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1405 CPU_ZERO(&mask[n - 1]); |
577 | 1406 |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1407 for (p = value[n].data + value[n].len - 1; |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1408 p >= value[n].data; |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1409 p--) |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1410 { |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1411 ch = *p; |
577 | 1412 |
1413 if (ch == ' ') { | |
1414 continue; | |
1415 } | |
1416 | |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1417 i++; |
577 | 1418 |
1419 if (ch == '0') { | |
1420 continue; | |
1421 } | |
1422 | |
1423 if (ch == '1') { | |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1424 CPU_SET(i - 1, &mask[n - 1]); |
577 | 1425 continue; |
1426 } | |
1427 | |
1428 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
1429 "invalid character \"%c\" in \"worker_cpu_affinity\"", | |
1430 ch); | |
2024 | 1431 return NGX_CONF_ERROR; |
577 | 1432 } |
1433 } | |
1434 | |
1435 #else | |
1436 | |
1437 ngx_conf_log_error(NGX_LOG_WARN, cf, 0, | |
1438 "\"worker_cpu_affinity\" is not supported " | |
1439 "on this platform, ignored"); | |
1440 #endif | |
1441 | |
1442 return NGX_CONF_OK; | |
1443 } | |
1444 | |
1445 | |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1446 ngx_cpuset_t * |
577 | 1447 ngx_get_cpu_affinity(ngx_uint_t n) |
1448 { | |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1449 #if (NGX_HAVE_CPU_AFFINITY) |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1450 ngx_uint_t i, j; |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1451 ngx_cpuset_t *mask; |
577 | 1452 ngx_core_conf_t *ccf; |
1453 | |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1454 static ngx_cpuset_t result; |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1455 |
577 | 1456 ccf = (ngx_core_conf_t *) ngx_get_conf(ngx_cycle->conf_ctx, |
1457 ngx_core_module); | |
1458 | |
1459 if (ccf->cpu_affinity == NULL) { | |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1460 return NULL; |
577 | 1461 } |
1462 | |
6335
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1463 if (ccf->cpu_affinity_auto) { |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1464 mask = &ccf->cpu_affinity[ccf->cpu_affinity_n - 1]; |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1465 |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1466 for (i = 0, j = n; /* void */ ; i++) { |
6335
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1467 |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1468 if (CPU_ISSET(i % CPU_SETSIZE, mask) && j-- == 0) { |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1469 break; |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1470 } |
6335
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1471 |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1472 if (i == CPU_SETSIZE && j == n) { |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1473 /* empty mask */ |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1474 return NULL; |
6335
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1475 } |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1476 |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1477 /* void */ |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1478 } |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1479 |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1480 CPU_ZERO(&result); |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1481 CPU_SET(i % CPU_SETSIZE, &result); |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1482 |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1483 return &result; |
6335
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1484 } |
96c4297375bc
Core: worker_cpu_affinity auto.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6264
diff
changeset
|
1485 |
577 | 1486 if (ccf->cpu_affinity_n > n) { |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1487 return &ccf->cpu_affinity[n]; |
577 | 1488 } |
1489 | |
6402
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1490 return &ccf->cpu_affinity[ccf->cpu_affinity_n - 1]; |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1491 |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1492 #else |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1493 |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1494 return NULL; |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1495 |
7296b38f6416
Core: added support for more than 64 CPUs in worker_cpu_affinity.
Vladimir Homutov <vl@nginx.com>
parents:
6399
diff
changeset
|
1496 #endif |
577 | 1497 } |
4890
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1498 |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1499 |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1500 static char * |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1501 ngx_set_worker_processes(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1502 { |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1503 ngx_str_t *value; |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1504 ngx_core_conf_t *ccf; |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1505 |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1506 ccf = (ngx_core_conf_t *) conf; |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1507 |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1508 if (ccf->worker_processes != NGX_CONF_UNSET) { |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1509 return "is duplicate"; |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1510 } |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1511 |
6264
7ac57369036c
Style: unneeded casts of cf->args->elts removed.
Maxim Dounin <mdounin@mdounin.ru>
parents:
6257
diff
changeset
|
1512 value = cf->args->elts; |
4890
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1513 |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1514 if (ngx_strcmp(value[1].data, "auto") == 0) { |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1515 ccf->worker_processes = ngx_ncpu; |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1516 return NGX_CONF_OK; |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1517 } |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1518 |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1519 ccf->worker_processes = ngx_atoi(value[1].data, value[1].len); |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1520 |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1521 if (ccf->worker_processes == NGX_ERROR) { |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1522 return "invalid value"; |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1523 } |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1524 |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1525 return NGX_CONF_OK; |
173cd5458281
Core: the "auto" parameter of the "worker_processes" directive.
Andrey Belov <defan@nginx.com>
parents:
4783
diff
changeset
|
1526 } |
6383 | 1527 |
1528 | |
1529 static char * | |
1530 ngx_load_module(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) | |
1531 { | |
1532 #if (NGX_HAVE_DLOPEN) | |
1533 void *handle; | |
1534 char **names, **order; | |
1535 ngx_str_t *value, file; | |
1536 ngx_uint_t i; | |
1537 ngx_module_t *module, **modules; | |
1538 ngx_pool_cleanup_t *cln; | |
1539 | |
1540 if (cf->cycle->modules_used) { | |
1541 return "is specified too late"; | |
1542 } | |
1543 | |
1544 value = cf->args->elts; | |
1545 | |
1546 file = value[1]; | |
1547 | |
1548 if (ngx_conf_full_name(cf->cycle, &file, 0) != NGX_OK) { | |
1549 return NGX_CONF_ERROR; | |
1550 } | |
1551 | |
1552 cln = ngx_pool_cleanup_add(cf->cycle->pool, 0); | |
1553 if (cln == NULL) { | |
1554 return NGX_CONF_ERROR; | |
1555 } | |
1556 | |
1557 handle = ngx_dlopen(file.data); | |
1558 if (handle == NULL) { | |
1559 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
1560 ngx_dlopen_n " \"%s\" failed (%s)", | |
1561 file.data, ngx_dlerror()); | |
1562 return NGX_CONF_ERROR; | |
1563 } | |
1564 | |
1565 cln->handler = ngx_unload_module; | |
1566 cln->data = handle; | |
1567 | |
1568 modules = ngx_dlsym(handle, "ngx_modules"); | |
1569 if (modules == NULL) { | |
1570 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
1571 ngx_dlsym_n " \"%V\", \"%s\" failed (%s)", | |
1572 &value[1], "ngx_modules", ngx_dlerror()); | |
1573 return NGX_CONF_ERROR; | |
1574 } | |
1575 | |
1576 names = ngx_dlsym(handle, "ngx_module_names"); | |
1577 if (names == NULL) { | |
1578 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
1579 ngx_dlsym_n " \"%V\", \"%s\" failed (%s)", | |
1580 &value[1], "ngx_module_names", ngx_dlerror()); | |
1581 return NGX_CONF_ERROR; | |
1582 } | |
1583 | |
1584 order = ngx_dlsym(handle, "ngx_module_order"); | |
1585 | |
1586 for (i = 0; modules[i]; i++) { | |
1587 module = modules[i]; | |
1588 module->name = names[i]; | |
1589 | |
1590 if (ngx_add_module(cf, &file, module, order) != NGX_OK) { | |
1591 return NGX_CONF_ERROR; | |
1592 } | |
1593 | |
6480 | 1594 ngx_log_debug2(NGX_LOG_DEBUG_CORE, cf->log, 0, "module: %s i:%ui", |
6383 | 1595 module->name, module->index); |
1596 } | |
1597 | |
1598 return NGX_CONF_OK; | |
1599 | |
1600 #else | |
1601 | |
1602 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
1603 "\"load_module\" is not supported " | |
1604 "on this platform"); | |
1605 return NGX_CONF_ERROR; | |
1606 | |
1607 #endif | |
1608 } | |
1609 | |
1610 | |
1611 #if (NGX_HAVE_DLOPEN) | |
1612 | |
1613 static void | |
1614 ngx_unload_module(void *data) | |
1615 { | |
1616 void *handle = data; | |
1617 | |
1618 if (ngx_dlclose(handle) != 0) { | |
1619 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0, | |
1620 ngx_dlclose_n " failed (%s)", ngx_dlerror()); | |
1621 } | |
1622 } | |
1623 | |
1624 #endif |