Mercurial > hg > nginx-ranges
comparison 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 |
comparison
equal
deleted
inserted
replaced
539:5f4de8cf0d9d | 578:f3a9e57d2e17 |
---|---|
84 { | 84 { |
85 char *title; | 85 char *title; |
86 u_char *p; | 86 u_char *p; |
87 size_t size; | 87 size_t size; |
88 ngx_int_t i; | 88 ngx_int_t i; |
89 ngx_uint_t n; | 89 ngx_uint_t n, sigio; |
90 sigset_t set; | 90 sigset_t set; |
91 struct itimerval itv; | 91 struct itimerval itv; |
92 ngx_uint_t live; | 92 ngx_uint_t live; |
93 ngx_msec_t delay; | 93 ngx_msec_t delay; |
94 ngx_listening_t *ls; | 94 ngx_listening_t *ls; |
137 NGX_PROCESS_RESPAWN); | 137 NGX_PROCESS_RESPAWN); |
138 ngx_start_cache_manager_processes(cycle, 0); | 138 ngx_start_cache_manager_processes(cycle, 0); |
139 | 139 |
140 ngx_new_binary = 0; | 140 ngx_new_binary = 0; |
141 delay = 0; | 141 delay = 0; |
142 sigio = 0; | |
142 live = 1; | 143 live = 1; |
143 | 144 |
144 for ( ;; ) { | 145 for ( ;; ) { |
145 if (delay) { | 146 if (delay) { |
146 if (ngx_sigalrm) { | 147 if (ngx_sigalrm) { |
148 sigio = 0; | |
147 delay *= 2; | 149 delay *= 2; |
148 ngx_sigalrm = 0; | 150 ngx_sigalrm = 0; |
149 } | 151 } |
150 | 152 |
151 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 153 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
166 | 168 |
167 sigsuspend(&set); | 169 sigsuspend(&set); |
168 | 170 |
169 ngx_time_update(0, 0); | 171 ngx_time_update(0, 0); |
170 | 172 |
171 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "wake up"); | 173 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
174 "wake up, sigio %i", sigio); | |
172 | 175 |
173 if (ngx_reap) { | 176 if (ngx_reap) { |
174 ngx_reap = 0; | 177 ngx_reap = 0; |
175 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "reap children"); | 178 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "reap children"); |
176 | 179 |
183 | 186 |
184 if (ngx_terminate) { | 187 if (ngx_terminate) { |
185 if (delay == 0) { | 188 if (delay == 0) { |
186 delay = 50; | 189 delay = 50; |
187 } | 190 } |
191 | |
192 if (sigio) { | |
193 sigio--; | |
194 continue; | |
195 } | |
196 | |
197 sigio = ccf->worker_processes + 2 /* cache processes */; | |
188 | 198 |
189 if (delay > 1000) { | 199 if (delay > 1000) { |
190 ngx_signal_worker_processes(cycle, SIGKILL); | 200 ngx_signal_worker_processes(cycle, SIGKILL); |
191 } else { | 201 } else { |
192 ngx_signal_worker_processes(cycle, | 202 ngx_signal_worker_processes(cycle, |
673 if (ngx_modules[i]->exit_master) { | 683 if (ngx_modules[i]->exit_master) { |
674 ngx_modules[i]->exit_master(cycle); | 684 ngx_modules[i]->exit_master(cycle); |
675 } | 685 } |
676 } | 686 } |
677 | 687 |
688 ngx_close_listening_sockets(cycle); | |
689 | |
678 /* | 690 /* |
679 * Copy ngx_cycle->log related data to the special static exit cycle, | 691 * Copy ngx_cycle->log related data to the special static exit cycle, |
680 * log, and log file structures enough to allow a signal handler to log. | 692 * log, and log file structures enough to allow a signal handler to log. |
681 * The handler may be called when standard ngx_cycle->log allocated from | 693 * The handler may be called when standard ngx_cycle->log allocated from |
682 * ngx_cycle->pool is already destroyed. | 694 * ngx_cycle->pool is already destroyed. |
699 static void | 711 static void |
700 ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data) | 712 ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data) |
701 { | 713 { |
702 ngx_uint_t i; | 714 ngx_uint_t i; |
703 ngx_connection_t *c; | 715 ngx_connection_t *c; |
716 | |
717 ngx_process = NGX_PROCESS_WORKER; | |
704 | 718 |
705 ngx_worker_process_init(cycle, 1); | 719 ngx_worker_process_init(cycle, 1); |
706 | 720 |
707 ngx_setproctitle("worker process"); | 721 ngx_setproctitle("worker process"); |
708 | 722 |
814 ngx_int_t n; | 828 ngx_int_t n; |
815 ngx_uint_t i; | 829 ngx_uint_t i; |
816 struct rlimit rlmt; | 830 struct rlimit rlmt; |
817 ngx_core_conf_t *ccf; | 831 ngx_core_conf_t *ccf; |
818 ngx_listening_t *ls; | 832 ngx_listening_t *ls; |
819 | |
820 ngx_process = NGX_PROCESS_WORKER; | |
821 | 833 |
822 if (ngx_set_environment(cycle, NULL) == NULL) { | 834 if (ngx_set_environment(cycle, NULL) == NULL) { |
823 /* fatal */ | 835 /* fatal */ |
824 exit(2); | 836 exit(2); |
825 } | 837 } |
1275 void *ident[4]; | 1287 void *ident[4]; |
1276 ngx_event_t ev; | 1288 ngx_event_t ev; |
1277 | 1289 |
1278 cycle->connection_n = 512; | 1290 cycle->connection_n = 512; |
1279 | 1291 |
1292 ngx_process = NGX_PROCESS_HELPER; | |
1293 | |
1280 ngx_worker_process_init(cycle, 0); | 1294 ngx_worker_process_init(cycle, 0); |
1281 | 1295 |
1282 ngx_close_listening_sockets(cycle); | 1296 ngx_close_listening_sockets(cycle); |
1283 | 1297 |
1284 ngx_memzero(&ev, sizeof(ngx_event_t)); | 1298 ngx_memzero(&ev, sizeof(ngx_event_t)); |