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