Mercurial > hg > nginx
comparison src/os/unix/ngx_process_cycle.c @ 557:ecd9c160f25b release-0.3.0
nginx-0.3.0-RELEASE import
*) Change: the 10-days live time limit of worker process was
eliminated. The limit was introduced because of millisecond timers
overflow.
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 07 Oct 2005 13:30:52 +0000 |
parents | 511a89da35ad |
children | c1f965ef9718 |
comparison
equal
deleted
inserted
replaced
556:21a706ff4e1f | 557:ecd9c160f25b |
---|---|
31 ngx_uint_t ngx_process; | 31 ngx_uint_t ngx_process; |
32 ngx_pid_t ngx_pid; | 32 ngx_pid_t ngx_pid; |
33 ngx_uint_t ngx_threaded; | 33 ngx_uint_t ngx_threaded; |
34 | 34 |
35 sig_atomic_t ngx_reap; | 35 sig_atomic_t ngx_reap; |
36 sig_atomic_t ngx_timer; | |
37 sig_atomic_t ngx_sigio; | 36 sig_atomic_t ngx_sigio; |
38 sig_atomic_t ngx_terminate; | 37 sig_atomic_t ngx_terminate; |
39 sig_atomic_t ngx_quit; | 38 sig_atomic_t ngx_quit; |
40 sig_atomic_t ngx_debug_quit; | 39 sig_atomic_t ngx_debug_quit; |
41 ngx_uint_t ngx_exiting; | 40 ngx_uint_t ngx_exiting; |
192 cycle->listening.nelts = 0; | 191 cycle->listening.nelts = 0; |
193 | 192 |
194 continue; | 193 continue; |
195 } | 194 } |
196 | 195 |
197 if (ngx_timer) { | |
198 ngx_timer = 0; | |
199 | |
200 if (!ngx_noaccepting) { | |
201 ngx_start_worker_processes(cycle, ccf->worker_processes, | |
202 NGX_PROCESS_JUST_RESPAWN); | |
203 ngx_start_garbage_collector(cycle, NGX_PROCESS_JUST_RESPAWN); | |
204 live = 1; | |
205 ngx_signal_worker_processes(cycle, | |
206 ngx_signal_value(NGX_SHUTDOWN_SIGNAL)); | |
207 } | |
208 } | |
209 | |
210 if (ngx_reconfigure) { | 196 if (ngx_reconfigure) { |
211 ngx_reconfigure = 0; | 197 ngx_reconfigure = 0; |
212 | 198 |
213 if (ngx_new_binary) { | 199 if (ngx_new_binary) { |
214 ngx_start_worker_processes(cycle, ccf->worker_processes, | 200 ngx_start_worker_processes(cycle, ccf->worker_processes, |
318 | 304 |
319 | 305 |
320 static void | 306 static void |
321 ngx_start_worker_processes(ngx_cycle_t *cycle, ngx_int_t n, ngx_int_t type) | 307 ngx_start_worker_processes(ngx_cycle_t *cycle, ngx_int_t n, ngx_int_t type) |
322 { | 308 { |
323 ngx_int_t i; | 309 ngx_int_t i; |
324 ngx_channel_t ch; | 310 ngx_channel_t ch; |
325 struct itimerval itv; | |
326 | 311 |
327 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "start worker processes"); | 312 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "start worker processes"); |
328 | 313 |
329 ch.command = NGX_CMD_OPEN_CHANNEL; | 314 ch.command = NGX_CMD_OPEN_CHANNEL; |
330 | 315 |
354 /* TODO: NGX_AGAIN */ | 339 /* TODO: NGX_AGAIN */ |
355 | 340 |
356 ngx_write_channel(ngx_processes[i].channel[0], | 341 ngx_write_channel(ngx_processes[i].channel[0], |
357 &ch, sizeof(ngx_channel_t), cycle->log); | 342 &ch, sizeof(ngx_channel_t), cycle->log); |
358 } | 343 } |
359 } | |
360 | |
361 /* | |
362 * we have to limit the maximum life time of the worker processes | |
363 * by 10 days because our millisecond event timer is limited | |
364 * by 24 days on 32-bit platforms | |
365 */ | |
366 | |
367 itv.it_interval.tv_sec = 0; | |
368 itv.it_interval.tv_usec = 0; | |
369 itv.it_value.tv_sec = 10 * 24 * 60 * 60; | |
370 itv.it_value.tv_usec = 0; | |
371 | |
372 if (setitimer(ITIMER_REAL, &itv, NULL) == -1) { | |
373 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, | |
374 "setitimer() failed"); | |
375 } | 344 } |
376 } | 345 } |
377 | 346 |
378 | 347 |
379 static void | 348 static void |
809 { | 778 { |
810 sigset_t set; | 779 sigset_t set; |
811 ngx_int_t n; | 780 ngx_int_t n; |
812 ngx_uint_t i; | 781 ngx_uint_t i; |
813 struct rlimit rlmt; | 782 struct rlimit rlmt; |
814 struct timeval tv; | |
815 ngx_core_conf_t *ccf; | 783 ngx_core_conf_t *ccf; |
816 ngx_listening_t *ls; | 784 ngx_listening_t *ls; |
817 | |
818 ngx_gettimeofday(&tv); | |
819 | |
820 ngx_start_msec = (ngx_epoch_msec_t) tv.tv_sec * 1000 + tv.tv_usec / 1000; | |
821 ngx_old_elapsed_msec = 0; | |
822 ngx_elapsed_msec = 0; | |
823 | |
824 | 785 |
825 ngx_process = NGX_PROCESS_WORKER; | 786 ngx_process = NGX_PROCESS_WORKER; |
826 | 787 |
827 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module); | 788 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module); |
828 | 789 |