Mercurial > hg > nginx
comparison src/os/unix/ngx_process_cycle.c @ 302:1526e7686b20
nginx-0.0.3-2004-04-01-10:21:13 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 01 Apr 2004 06:21:13 +0000 |
parents | 744965ec6275 |
children | 00c5660d2707 |
comparison
equal
deleted
inserted
replaced
301:744965ec6275 | 302:1526e7686b20 |
---|---|
63 ngx_new_binary = 0; | 63 ngx_new_binary = 0; |
64 delay = 0; | 64 delay = 0; |
65 signo = 0; | 65 signo = 0; |
66 live = 0; | 66 live = 0; |
67 | 67 |
68 ngx_accept_mutex = mmap(NULL, sizeof(ngx_atomic_t), PROT_READ|PROT_WRITE, | 68 ngx_accept_mutex_ptr = mmap(NULL, sizeof(ngx_atomic_t), |
69 MAP_ANON|MAP_SHARED, -1, 0); | 69 PROT_READ|PROT_WRITE, |
70 | 70 MAP_ANON|MAP_SHARED, -1, 0); |
71 if (ngx_accept_mutex == NULL) { | 71 |
72 if (ngx_accept_mutex_ptr == NULL) { | |
72 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, | 73 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, |
73 "mmap(MAP_ANON|MAP_SHARED) failed"); | 74 "mmap(MAP_ANON|MAP_SHARED) failed"); |
74 /* fatal */ | 75 /* fatal */ |
75 exit(2); | 76 exit(2); |
76 } | 77 } |
373 #endif | 374 #endif |
374 | 375 |
375 ngx_process = NGX_PROCESS_WORKER; | 376 ngx_process = NGX_PROCESS_WORKER; |
376 ngx_last_process = 0; | 377 ngx_last_process = 0; |
377 | 378 |
378 if (ngx_accept_mutex) { | |
379 ngx_accept_token = 1; | |
380 } | |
381 | |
382 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module); | 379 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module); |
380 | |
381 if (ccf->worker_processes > 1) { | |
382 ngx_accept_mutex = ngx_accept_mutex_ptr; | |
383 ngx_accept_mutex_held = 1; | |
384 } | |
383 | 385 |
384 if (ccf->group != (gid_t) NGX_CONF_UNSET) { | 386 if (ccf->group != (gid_t) NGX_CONF_UNSET) { |
385 if (setuid(ccf->group) == -1) { | 387 if (setuid(ccf->group) == -1) { |
386 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, | 388 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, |
387 "setgid(%d) failed", ccf->group); | 389 "setgid(%d) failed", ccf->group); |
481 } | 483 } |
482 } | 484 } |
483 | 485 |
484 ngx_close_listening_sockets(cycle); | 486 ngx_close_listening_sockets(cycle); |
485 | 487 |
488 ngx_accept_mutex = NULL; | |
489 | |
486 for ( ;; ) { | 490 for ( ;; ) { |
487 if (ngx_event_timer_rbtree == &ngx_event_timer_sentinel) { | 491 if (ngx_event_timer_rbtree == &ngx_event_timer_sentinel) { |
488 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exiting"); | 492 ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exiting"); |
489 exit(0); | 493 exit(0); |
490 } | 494 } |