Mercurial > hg > nginx-ranges
diff src/os/unix/ngx_process_cycle.c @ 578:f3a9e57d2e17
Merge with current.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 11 Mar 2010 21:27:17 +0300 |
parents | 43e02819c5cf |
children | be4f34123024 |
line wrap: on
line diff
--- a/src/os/unix/ngx_process_cycle.c +++ b/src/os/unix/ngx_process_cycle.c @@ -86,7 +86,7 @@ ngx_master_process_cycle(ngx_cycle_t *cy u_char *p; size_t size; ngx_int_t i; - ngx_uint_t n; + ngx_uint_t n, sigio; sigset_t set; struct itimerval itv; ngx_uint_t live; @@ -139,11 +139,13 @@ ngx_master_process_cycle(ngx_cycle_t *cy ngx_new_binary = 0; delay = 0; + sigio = 0; live = 1; for ( ;; ) { if (delay) { if (ngx_sigalrm) { + sigio = 0; delay *= 2; ngx_sigalrm = 0; } @@ -168,7 +170,8 @@ ngx_master_process_cycle(ngx_cycle_t *cy ngx_time_update(0, 0); - ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "wake up"); + ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, + "wake up, sigio %i", sigio); if (ngx_reap) { ngx_reap = 0; @@ -186,6 +189,13 @@ ngx_master_process_cycle(ngx_cycle_t *cy delay = 50; } + if (sigio) { + sigio--; + continue; + } + + sigio = ccf->worker_processes + 2 /* cache processes */; + if (delay > 1000) { ngx_signal_worker_processes(cycle, SIGKILL); } else { @@ -675,6 +685,8 @@ ngx_master_process_exit(ngx_cycle_t *cyc } } + ngx_close_listening_sockets(cycle); + /* * Copy ngx_cycle->log related data to the special static exit cycle, * log, and log file structures enough to allow a signal handler to log. @@ -702,6 +714,8 @@ ngx_worker_process_cycle(ngx_cycle_t *cy ngx_uint_t i; ngx_connection_t *c; + ngx_process = NGX_PROCESS_WORKER; + ngx_worker_process_init(cycle, 1); ngx_setproctitle("worker process"); @@ -817,8 +831,6 @@ ngx_worker_process_init(ngx_cycle_t *cyc ngx_core_conf_t *ccf; ngx_listening_t *ls; - ngx_process = NGX_PROCESS_WORKER; - if (ngx_set_environment(cycle, NULL) == NULL) { /* fatal */ exit(2); @@ -1277,6 +1289,8 @@ ngx_cache_manager_process_cycle(ngx_cycl cycle->connection_n = 512; + ngx_process = NGX_PROCESS_HELPER; + ngx_worker_process_init(cycle, 0); ngx_close_listening_sockets(cycle);