summaryrefslogtreecommitdiffhomepage
path: root/src/os/win32/ngx_process_cycle.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2009-06-15 09:48:15 +0000
committerIgor Sysoev <igor@sysoev.ru>2009-06-15 09:48:15 +0000
commitd8615fb29018da7ecb428506204af81b55b46b84 (patch)
tree53868e9ef5e13b810f70be3d724a9adc2309e419 /src/os/win32/ngx_process_cycle.c
parent47246d6a1d65bb11c6db7d074ed8d317813ccfdb (diff)
downloadnginx-d8615fb29018da7ecb428506204af81b55b46b84.tar.gz
nginx-d8615fb29018da7ecb428506204af81b55b46b84.tar.bz2
merge r2897, r2898, r2899, r2901, r2902, r2904, r2905, r2906, r2907,
r2909, r2910, r2922, r2923, r2924, r2925, r2929: various win32 fixes: *) use no-threads for Unix builds only *) Win32 returns ERROR_PATH_NOT_FOUND instead of ERROR_FILE_NOT_FOUND *) add trailing zero to a file name in ngx_win32_rename_file() *) fix logging in ngx_win32_rename_file() *) allow shared memory segments more than 4G *) fix memory leak in successful case *) log shared memory name in failure case *) test that zone has the same addresses in different processes *) add drive letter for Win32 root path *) log GetExitCodeProcess()'s errno *) test premature process termination *) fix debug logging *) exit if no workers could not be started *) do not quit old workers if no new workers could not be started *) a signaller process should stop configuration processing just after it is able to get pid file, this allows to not open log files, etc. *) win32 master process had aready closed listening sockets
Diffstat (limited to 'src/os/win32/ngx_process_cycle.c')
-rw-r--r--src/os/win32/ngx_process_cycle.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/os/win32/ngx_process_cycle.c b/src/os/win32/ngx_process_cycle.c
index d4fba8b3c..12b13d17e 100644
--- a/src/os/win32/ngx_process_cycle.c
+++ b/src/os/win32/ngx_process_cycle.c
@@ -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,11 @@ 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);
+ ngx_close_listening_sockets(cycle);
+
+ if (ngx_start_worker_processes(cycle, NGX_PROCESS_JUST_RESPAWN)) {
+ ngx_quit_worker_processes(cycle, 1);
+ }
continue;
}
@@ -382,7 +387,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 +399,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;
}
@@ -428,7 +435,7 @@ ngx_quit_worker_processes(ngx_cycle_t *cycle, ngx_uint_t old)
for (n = 0; n < ngx_last_process; n++) {
ngx_log_debug5(NGX_LOG_DEBUG_CORE, cycle->log, 0,
- "process: %d %P %p e:%d t:%d r:%d j:%d",
+ "process: %d %P %p e:%d j:%d",
n,
ngx_processes[n].pid,
ngx_processes[n].handle,
@@ -495,7 +502,7 @@ ngx_reap_worker(ngx_cycle_t *cycle, HANDLE h)
}
if (GetExitCodeProcess(h, &code) == 0) {
- ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
"GetExitCodeProcess(%P) failed",
ngx_processes[n].pid);
}
@@ -538,7 +545,7 @@ found:
for (n = 0; n < ngx_last_process; n++) {
ngx_log_debug5(NGX_LOG_DEBUG_CORE, cycle->log, 0,
- "process: %d %P %p e:%d t:%d r:%d j:%d",
+ "process: %d %P %p e:%d j:%d",
n,
ngx_processes[n].pid,
ngx_processes[n].handle,