comparison src/core/nginx.c @ 220:4f81b931e9ff

nginx-0.0.1-2004-01-08-11:47:17 import
author Igor Sysoev <igor@sysoev.ru>
date Thu, 08 Jan 2004 08:47:17 +0000
parents f57597ec5249
children 401154e21826
comparison
equal deleted inserted replaced
219:f57597ec5249 220:4f81b931e9ff
3 #include <ngx_core.h> 3 #include <ngx_core.h>
4 #include <ngx_event.h> 4 #include <ngx_event.h>
5 #include <nginx.h> 5 #include <nginx.h>
6 6
7 7
8 static void ngx_master_process_cycle(ngx_cycle_t *cycle);
8 static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data); 9 static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data);
9 static ngx_int_t ngx_add_inherited_sockets(ngx_cycle_t *cycle, char **envp); 10 static ngx_int_t ngx_add_inherited_sockets(ngx_cycle_t *cycle, char **envp);
10 static void ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv); 11 static void ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv);
11 static ngx_int_t ngx_core_module_init(ngx_cycle_t *cycle); 12 static ngx_int_t ngx_core_module_init(ngx_cycle_t *cycle);
12 13
64 /* STUB */ 65 /* STUB */
65 uid_t user; 66 uid_t user;
66 67
67 u_int ngx_connection_counter; 68 u_int ngx_connection_counter;
68 69
69 ngx_int_t ngx_master; 70 ngx_int_t ngx_process;
70 ngx_int_t ngx_single;
71 71
72 72
73 ngx_int_t ngx_respawn; 73 ngx_int_t ngx_respawn;
74 ngx_int_t ngx_terminate; 74 ngx_int_t ngx_terminate;
75 ngx_int_t ngx_quit; 75 ngx_int_t ngx_quit;
78 ngx_int_t ngx_change_binary; 78 ngx_int_t ngx_change_binary;
79 79
80 80
81 int main(int argc, char *const *argv, char **envp) 81 int main(int argc, char *const *argv, char **envp)
82 { 82 {
83 struct timeval tv;
84 ngx_fd_t fd; 83 ngx_fd_t fd;
85 ngx_int_t i; 84 ngx_int_t i;
86 ngx_err_t err;
87 ngx_log_t *log; 85 ngx_log_t *log;
88 ngx_cycle_t *cycle, init_cycle; 86 ngx_cycle_t *cycle, init_cycle;
89 ngx_open_file_t *file; 87 ngx_open_file_t *file;
90 ngx_core_conf_t *ccf; 88 ngx_core_conf_t *ccf;
91 #if !(WIN32) 89 #if !(WIN32)
138 136
139 ngx_cycle = cycle; 137 ngx_cycle = cycle;
140 138
141 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module); 139 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
142 140
143 if (ccf->single == 1) { 141 ngx_process = (ccf->single == 1) ? NGX_PROCESS_SINGLE : NGX_PROCESS_MASTER;
144 ngx_master = 0; 142
145 ngx_single = 1; 143 #if (WIN32)
146 144
147 } else { 145 #if 0
148 ngx_master = 1; 146
149 ngx_single = 0; 147 if (run_as_service) {
150 } 148 if (ngx_servie(cycle->log) == NGX_ERROR) {
151 149 return 1;
152 #if !(WIN32) 150 }
151
152 return 0;
153 }
154
155 #endif
156
157 #else
153 158
154 /* STUB */ 159 /* STUB */
155 if (ccf->user.len) { 160 if (ccf->user.len) {
156 pwd = getpwnam(ccf->user.data); 161 pwd = getpwnam(ccf->user.data);
157 if (pwd == NULL) { 162 if (pwd == NULL) {
203 ngx_close_file_n " \"%s\" failed", pidfile.name.data); 208 ngx_close_file_n " \"%s\" failed", pidfile.name.data);
204 } 209 }
205 210
206 #endif 211 #endif
207 212
208 /* a life cycle */ 213 ngx_master_process_cycle(cycle);
214
215 return 0;
216 }
217
218
219 static void ngx_master_process_cycle(ngx_cycle_t *cycle)
220 {
221 struct timeval tv;
222 ngx_int_t i;
223 ngx_err_t err;
209 224
210 for ( ;; ) { 225 for ( ;; ) {
211 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "new cycle"); 226 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "new cycle");
212 227
213 if (ngx_master) { 228 if (ngx_process == NGX_PROCESS_MASTER) {
214 ngx_spawn_process(cycle, ngx_worker_process_cycle, NULL, 229 ngx_spawn_process(cycle, ngx_worker_process_cycle, NULL,
215 "worker process", NGX_PROCESS_RESPAWN); 230 "worker process", NGX_PROCESS_RESPAWN);
216 231
217 } else { 232 } else {
218 ngx_init_temp_number(); 233 ngx_init_temp_number();
225 } 240 }
226 } 241 }
227 } 242 }
228 } 243 }
229 244
230 #if 0
231 reconfigure = 0;
232 reopen = 0;
233 #endif
234 245
235 /* a cycle with the same configuration */ 246 /* a cycle with the same configuration */
236 247
237 for ( ;; ) { 248 for ( ;; ) {
238 249
240 251
241 for ( ;; ) { 252 for ( ;; ) {
242 253
243 err = 0; 254 err = 0;
244 255
245 if (ngx_single) { 256 if (ngx_process == NGX_PROCESS_SINGLE) {
246 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, 257 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
247 "worker cycle"); 258 "worker cycle");
248 259
249 ngx_process_events(cycle->log); 260 ngx_process_events(cycle->log);
250 261
262 } 273 }
263 } 274 }
264 275
265 if (ngx_quit || ngx_terminate) { 276 if (ngx_quit || ngx_terminate) {
266 #if !(WIN32) 277 #if !(WIN32)
278 #if 0
267 if (ngx_delete_file(pidfile.name.data) == NGX_FILE_ERROR) { 279 if (ngx_delete_file(pidfile.name.data) == NGX_FILE_ERROR) {
268 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, 280 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
269 ngx_delete_file_n " \"%s\" failed", 281 ngx_delete_file_n " \"%s\" failed",
270 pidfile.name.data); 282 pidfile.name.data);
271 } 283 }
272 #endif 284 #endif
285 #endif
273 286
274 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exiting"); 287 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exiting");
275 288
276 if (ngx_master) { 289 if (ngx_process == NGX_PROCESS_MASTER) {
277 ngx_signal_processes(cycle, 290 ngx_signal_processes(cycle,
278 ngx_signal_value(NGX_SHUTDOWN_SIGNAL)); 291 ngx_signal_value(NGX_SHUTDOWN_SIGNAL));
279 292
280 /* TODO: wait workers */ 293 /* TODO: wait workers */
281 294
291 304
292 if (err == NGX_EINTR) { 305 if (err == NGX_EINTR) {
293 ngx_respawn_processes(cycle); 306 ngx_respawn_processes(cycle);
294 } 307 }
295 308
309 #if 0
296 if (ngx_change_binary) { 310 if (ngx_change_binary) {
297 ngx_change_binary = 0; 311 ngx_change_binary = 0;
298 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, 312 ngx_log_error(NGX_LOG_INFO, cycle->log, 0,
299 "changing binary"); 313 "changing binary");
300 ngx_exec_new_binary(cycle, argv); 314 ngx_exec_new_binary(cycle, argv);
301 /* TODO: quit workers */ 315 /* TODO: quit workers */
302 } 316 }
317 #endif
303 318
304 if (ngx_reconfigure) { 319 if (ngx_reconfigure) {
305 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "reconfiguring"); 320 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "reconfiguring");
306 break; 321 break;
307 } 322 }
331 346
332 static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data) 347 static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data)
333 { 348 {
334 ngx_int_t i; 349 ngx_int_t i;
335 ngx_listening_t *ls; 350 ngx_listening_t *ls;
351
352 ngx_process = NGX_PROCESS_WORKER;
336 353
337 if (user) { 354 if (user) {
338 if (setuid(user) == -1) { 355 if (setuid(user) == -1) {
339 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, 356 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
340 "setuid() failed"); 357 "setuid() failed");