Mercurial > hg > nginx-quic
comparison src/os/unix/ngx_process_cycle.c @ 3102:4b5cf483c6a8 stable-0.7
merge r3047, r3048, r3049:
twice termination delay only after SIGALRM, otherwise many separate SIGCHLD
and SIGIO signals quickly increase delay to the level when SIGKILL is sent
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 07 Sep 2009 11:31:20 +0000 |
parents | d19979e0d980 |
children | 1f3cd08ebb82 |
comparison
equal
deleted
inserted
replaced
3101:49272f5b45a6 | 3102:4b5cf483c6a8 |
---|---|
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_sigio; | 36 sig_atomic_t ngx_sigio; |
37 sig_atomic_t ngx_sigalrm; | |
37 sig_atomic_t ngx_terminate; | 38 sig_atomic_t ngx_terminate; |
38 sig_atomic_t ngx_quit; | 39 sig_atomic_t ngx_quit; |
39 sig_atomic_t ngx_debug_quit; | 40 sig_atomic_t ngx_debug_quit; |
40 ngx_uint_t ngx_exiting; | 41 ngx_uint_t ngx_exiting; |
41 sig_atomic_t ngx_reconfigure; | 42 sig_atomic_t ngx_reconfigure; |
128 delay = 0; | 129 delay = 0; |
129 live = 1; | 130 live = 1; |
130 | 131 |
131 for ( ;; ) { | 132 for ( ;; ) { |
132 if (delay) { | 133 if (delay) { |
133 delay *= 2; | 134 if (ngx_sigalrm) { |
135 delay *= 2; | |
136 ngx_sigalrm = 0; | |
137 } | |
134 | 138 |
135 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, | 139 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, |
136 "temination cycle: %d", delay); | 140 "termination cycle: %d", delay); |
137 | 141 |
138 itv.it_interval.tv_sec = 0; | 142 itv.it_interval.tv_sec = 0; |
139 itv.it_interval.tv_usec = 0; | 143 itv.it_interval.tv_usec = 0; |
140 itv.it_value.tv_sec = delay / 1000; | 144 itv.it_value.tv_sec = delay / 1000; |
141 itv.it_value.tv_usec = (delay % 1000 ) * 1000; | 145 itv.it_value.tv_usec = (delay % 1000 ) * 1000; |
490 "kill (%P, %d)" , ngx_processes[i].pid, signo); | 494 "kill (%P, %d)" , ngx_processes[i].pid, signo); |
491 | 495 |
492 if (kill(ngx_processes[i].pid, signo) == -1) { | 496 if (kill(ngx_processes[i].pid, signo) == -1) { |
493 err = ngx_errno; | 497 err = ngx_errno; |
494 ngx_log_error(NGX_LOG_ALERT, cycle->log, err, | 498 ngx_log_error(NGX_LOG_ALERT, cycle->log, err, |
495 "kill(%P, %d) failed", | 499 "kill(%P, %d) failed", ngx_processes[i].pid, signo); |
496 ngx_processes[i].pid, signo); | |
497 | 500 |
498 if (err == NGX_ESRCH) { | 501 if (err == NGX_ESRCH) { |
499 ngx_processes[i].exited = 1; | 502 ngx_processes[i].exited = 1; |
500 ngx_processes[i].exiting = 0; | 503 ngx_processes[i].exiting = 0; |
501 ngx_reap = 1; | 504 ngx_reap = 1; |