]> git.kaiwu.me - nginx.git/commitdiff
*) exit if no workers could not be started
authorIgor Sysoev <igor@sysoev.ru>
Sat, 6 Jun 2009 12:36:44 +0000 (12:36 +0000)
committerIgor Sysoev <igor@sysoev.ru>
Sat, 6 Jun 2009 12:36:44 +0000 (12:36 +0000)
*) do not quit old workers if no new workers could not be started

src/os/win32/ngx_process_cycle.c

index c26753a702f69141c6427780d80053833714f16d..a10dbfdf638aea836c9fd19cbebf1ad5622f1c35 100644 (file)
@@ -14,7 +14,7 @@ static void ngx_process_init(ngx_cycle_t *cycle);
 static void ngx_console_init(ngx_cycle_t *cycle);
 static int __stdcall ngx_console_handler(u_long type);
 static ngx_int_t ngx_create_events(ngx_cycle_t *cycle);
-static void ngx_start_worker_processes(ngx_cycle_t *cycle, ngx_int_t type);
+static ngx_int_t ngx_start_worker_processes(ngx_cycle_t *cycle, ngx_int_t type);
 static void ngx_reopen_worker_processes(ngx_cycle_t *cycle);
 static void ngx_quit_worker_processes(ngx_cycle_t *cycle, ngx_uint_t old);
 static void ngx_terminate_worker_processes(ngx_cycle_t *cycle);
@@ -116,7 +116,9 @@ ngx_master_process_cycle(ngx_cycle_t *cycle)
 
     ngx_close_listening_sockets(cycle);
 
-    ngx_start_worker_processes(cycle, NGX_PROCESS_RESPAWN);
+    if (ngx_start_worker_processes(cycle, NGX_PROCESS_RESPAWN) == 0) {
+        exit(2);
+    }
 
     timer = 0;
     timeout = INFINITE;
@@ -206,8 +208,9 @@ ngx_master_process_cycle(ngx_cycle_t *cycle)
 
             ngx_cycle = cycle;
 
-            ngx_start_worker_processes(cycle, NGX_PROCESS_JUST_RESPAWN);
-            ngx_quit_worker_processes(cycle, 1);
+            if (ngx_start_worker_processes(cycle, NGX_PROCESS_JUST_RESPAWN)) {
+                ngx_quit_worker_processes(cycle, 1);
+            }
 
             continue;
         }
@@ -382,7 +385,7 @@ ngx_create_events(ngx_cycle_t *cycle)
 }
 
 
-static void
+static ngx_int_t
 ngx_start_worker_processes(ngx_cycle_t *cycle, ngx_int_t type)
 {
     ngx_int_t         n;
@@ -394,9 +397,11 @@ ngx_start_worker_processes(ngx_cycle_t *cycle, ngx_int_t type)
 
     for (n = 0; n < ccf->worker_processes; n++) {
         if (ngx_spawn_process(cycle, "worker", type) == NGX_INVALID_PID) {
-            return;
+            break;
         }
     }
+
+    return n;
 }