diff src/os/unix/ngx_posix_init.c @ 222:99df0edb63ed

nginx-0.0.1-2004-01-09-00:02:06 import
author Igor Sysoev <igor@sysoev.ru>
date Thu, 08 Jan 2004 21:02:06 +0000
parents 401154e21826
children 2e9a8a14a0cf
line wrap: on
line diff
--- a/src/os/unix/ngx_posix_init.c
+++ b/src/os/unix/ngx_posix_init.c
@@ -13,7 +13,6 @@ void ngx_signal_handler(int signo);
 typedef struct {
      int     signo;
      char   *signame;
-     char   *action;
      void  (*handler)(int signo);
 } ngx_signal_t;
 
@@ -21,39 +20,33 @@ typedef struct {
 ngx_signal_t  signals[] = {
     { ngx_signal_value(NGX_RECONFIGURE_SIGNAL),
       "SIG" ngx_value(NGX_RECONFIGURE_SIGNAL),
-      ", reconfiguring",
       ngx_signal_handler },
 
     { ngx_signal_value(NGX_REOPEN_SIGNAL),
       "SIG" ngx_value(NGX_REOPEN_SIGNAL),
-      ", reopen logs",
       ngx_signal_handler },
 
-    { ngx_signal_value(NGX_INTERRUPT_SIGNAL),
-      "SIG" ngx_value(NGX_INTERRUPT_SIGNAL),
-      ", exiting",
+    { ngx_signal_value(NGX_PAUSE_SIGNAL),
+      "SIG" ngx_value(NGX_PAUSE_SIGNAL),
       ngx_signal_handler },
 
     { ngx_signal_value(NGX_TERMINATE_SIGNAL),
       "SIG" ngx_value(NGX_TERMINATE_SIGNAL),
-      ", exiting",
       ngx_signal_handler },
 
     { ngx_signal_value(NGX_SHUTDOWN_SIGNAL),
       "SIG" ngx_value(NGX_SHUTDOWN_SIGNAL),
-      ", shutdowning",
       ngx_signal_handler },
 
     { ngx_signal_value(NGX_CHANGEBIN_SIGNAL),
       "SIG" ngx_value(NGX_CHANGEBIN_SIGNAL),
-      ", changing binary",
       ngx_signal_handler },
 
-    { SIGCHLD, "SIGCHLD", "", ngx_signal_handler },
+    { SIGCHLD, "SIGCHLD", ngx_signal_handler },
 
-    { SIGPIPE, "SIGPIPE, SIG_IGN", NULL, SIG_IGN },
+    { SIGPIPE, "SIGPIPE, SIG_IGN", SIG_IGN },
 
-    { 0, NULL, NULL, NULL }
+    { 0, NULL, NULL }
 };
 
 
@@ -98,6 +91,7 @@ int ngx_posix_init(ngx_log_t *log)
 
 void ngx_signal_handler(int signo)
 {
+    char            *action;
     struct timeval   tv;
     ngx_err_t        err;
     ngx_signal_t    *sig;
@@ -113,37 +107,88 @@ void ngx_signal_handler(int signo)
     ngx_gettimeofday(&tv);
     ngx_time_update(tv.tv_sec);
 
-    ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, 0,
-                  "signal %d (%s) received%s",
-                  signo, sig->signame, sig->action);
+    action = "";
+
+    switch (ngx_process) {
+
+    case NGX_PROCESS_MASTER:
+    case NGX_PROCESS_QUITING:
+    case NGX_PROCESS_PAUSED:
+        switch (signo) {
 
-    switch (signo) {
+        case ngx_signal_value(NGX_SHUTDOWN_SIGNAL):
+            ngx_quit = 1;
+            action = ", shutdowning";
+            break;
+
+        case ngx_signal_value(NGX_TERMINATE_SIGNAL):
+            ngx_terminate = 1;
+            action = ", exiting";
+            break;
 
-    case SIGCHLD:
-        ngx_reap = 1;
-        ngx_process_get_status();
-        break;
+        case ngx_signal_value(NGX_PAUSE_SIGNAL):
+            ngx_pause = 1;
+            action = ", pausing";
+            break;
+
+        case ngx_signal_value(NGX_RECONFIGURE_SIGNAL):
+            ngx_reconfigure = 1;
+            action = ", reconfiguring";
+            break;
 
-    case ngx_signal_value(NGX_SHUTDOWN_SIGNAL):
-        ngx_quit = 1;
+        case ngx_signal_value(NGX_REOPEN_SIGNAL):
+            ngx_reopen = 1;
+            action = ", reopen logs";
+            break;
+
+        case ngx_signal_value(NGX_CHANGEBIN_SIGNAL):
+            ngx_change_binary = 1;
+            action = ", changing binary";
+            break;
+
+        case SIGCHLD:
+            ngx_reap = 1;
+            break;
+        }
+
         break;
 
-    case ngx_signal_value(NGX_TERMINATE_SIGNAL):
-    case ngx_signal_value(NGX_INTERRUPT_SIGNAL):
-        ngx_terminate = 1;
-        break;
+    case NGX_PROCESS_WORKER:
+        switch (signo) {
+
+        case ngx_signal_value(NGX_SHUTDOWN_SIGNAL):
+            ngx_quit = 1;
+            action = ", shutdowning";
+            break;
+
+        case ngx_signal_value(NGX_TERMINATE_SIGNAL):
+            ngx_terminate = 1;
+            action = ", exiting";
+            break;
 
-    case ngx_signal_value(NGX_RECONFIGURE_SIGNAL):
-        ngx_reconfigure = 1;
+#if 0
+        case ngx_signal_value(NGX_REOPEN_SIGNAL):
+            ngx_reopen = 1;
+            action = ", reopen logs";
+            break;
+#endif
+
+        case ngx_signal_value(NGX_RECONFIGURE_SIGNAL):
+        case ngx_signal_value(NGX_REOPEN_SIGNAL):
+        case ngx_signal_value(NGX_PAUSE_SIGNAL):
+        case ngx_signal_value(NGX_CHANGEBIN_SIGNAL):
+            action = ", ignoring";
+            break;
+        }
+
         break;
+    }
 
-    case ngx_signal_value(NGX_REOPEN_SIGNAL):
-        ngx_reopen = 1;
-        break;
+    ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, 0,
+                  "signal %d (%s) received%s", signo, sig->signame, action);
 
-    case ngx_signal_value(NGX_CHANGEBIN_SIGNAL):
-        ngx_change_binary = 1;
-        break;
+    if (signo == SIGCHLD) {
+        ngx_process_get_status();
     }
 
     ngx_set_errno(err);