]> git.kaiwu.me - nginx.git/commitdiff
merge r3047, r3048, r3049:
authorIgor Sysoev <igor@sysoev.ru>
Mon, 7 Sep 2009 11:31:20 +0000 (11:31 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Mon, 7 Sep 2009 11:31:20 +0000 (11:31 +0000)
twice termination delay only after SIGALRM, otherwise many separate SIGCHLD
and SIGIO signals quickly increase delay to the level when SIGKILL is sent

src/core/ngx_string.c
src/os/unix/ngx_process.c
src/os/unix/ngx_process_cycle.c
src/os/unix/ngx_process_cycle.h

index d73cb8699c530a3c1131603032c3f950bdbe7374..e73dc41d8a2e0808eef449d02e3f77dc389be161 100644 (file)
@@ -87,7 +87,7 @@ ngx_pstrdup(ngx_pool_t *pool, ngx_str_t *src)
  *
  *  reserved:
  *    %t                        ptrdiff_t
- *    %S                        null-teminated wchar string
+ *    %S                        null-terminated wchar string
  *    %C                        wchar
  */
 
index 7446c138bb14bc1caadb1120c45079d7024f1998..c480d6899f9e16a77fb7d73fd283fd15dd852647 100644 (file)
@@ -359,6 +359,7 @@ ngx_signal_handler(int signo)
             break;
 
         case SIGALRM:
+            ngx_sigalrm = 1;
             break;
 
         case SIGIO:
index 92f6bf6f39032a4d0f8fb55121e177e7c72bc78b..1ee278fe839258411f8b3d2d82fe3803aee380b9 100644 (file)
@@ -34,6 +34,7 @@ ngx_uint_t    ngx_threaded;
 
 sig_atomic_t  ngx_reap;
 sig_atomic_t  ngx_sigio;
+sig_atomic_t  ngx_sigalrm;
 sig_atomic_t  ngx_terminate;
 sig_atomic_t  ngx_quit;
 sig_atomic_t  ngx_debug_quit;
@@ -130,10 +131,13 @@ ngx_master_process_cycle(ngx_cycle_t *cycle)
 
     for ( ;; ) {
         if (delay) {
-            delay *= 2;
+            if (ngx_sigalrm) {
+                delay *= 2;
+                ngx_sigalrm = 0;
+            }
 
             ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
-                           "temination cycle: %d", delay);
+                           "termination cycle: %d", delay);
 
             itv.it_interval.tv_sec = 0;
             itv.it_interval.tv_usec = 0;
@@ -492,8 +496,7 @@ ngx_signal_worker_processes(ngx_cycle_t *cycle, int signo)
         if (kill(ngx_processes[i].pid, signo) == -1) {
             err = ngx_errno;
             ngx_log_error(NGX_LOG_ALERT, cycle->log, err,
-                          "kill(%P, %d) failed",
-                          ngx_processes[i].pid, signo);
+                          "kill(%P, %d) failed", ngx_processes[i].pid, signo);
 
             if (err == NGX_ESRCH) {
                 ngx_processes[i].exited = 1;
index c52b6f0e12ad15d5aebebb36c5c881fdcda906e1..9bf04749f0ba4f1795c93298a494cbea9605b7f0 100644 (file)
@@ -39,6 +39,7 @@ extern ngx_uint_t      ngx_exiting;
 
 extern sig_atomic_t    ngx_reap;
 extern sig_atomic_t    ngx_sigio;
+extern sig_atomic_t    ngx_sigalrm;
 extern sig_atomic_t    ngx_quit;
 extern sig_atomic_t    ngx_debug_quit;
 extern sig_atomic_t    ngx_terminate;