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