Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nginx/nginx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2009-06-02 18:26:59 +0400
committerIgor Sysoev <igor@sysoev.ru>2009-06-02 18:26:59 +0400
commit42846485a23246b55bd9ff6b59ccc85ba8066b70 (patch)
tree96a38b244156cbc630cacfb4c4555d42e3f6c38a /src
parent130690fceb00bf93397311cd3dc244d07634ba14 (diff)
test premature process termination
Diffstat (limited to 'src')
-rw-r--r--src/os/win32/ngx_process.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/os/win32/ngx_process.c b/src/os/win32/ngx_process.c
index bbc7afa9e..e7c283612 100644
--- a/src/os/win32/ngx_process.c
+++ b/src/os/win32/ngx_process.c
@@ -19,10 +19,11 @@ ngx_process_t ngx_processes[NGX_MAX_PROCESSES];
ngx_pid_t
ngx_spawn_process(ngx_cycle_t *cycle, char *name, ngx_int_t respawn)
{
- u_long rc, n;
+ u_long rc, n, code;
ngx_int_t s;
ngx_pid_t pid;
ngx_exec_ctx_t ctx;
+ HANDLE events[2];
char file[MAX_PATH + 1];
if (respawn >= 0) {
@@ -79,12 +80,15 @@ ngx_spawn_process(ngx_cycle_t *cycle, char *name, ngx_int_t respawn)
ngx_sprintf(ngx_processes[s].reopen_event, "ngx_%s_reopen_%ul%Z",
name, pid);
- rc = WaitForSingleObject(ngx_master_process_event, 5000);
+ events[0] = ngx_master_process_event;
+ events[1] = ctx.child;
+
+ rc = WaitForMultipleObjects(2, events, 0, 5000);
ngx_time_update(0, 0);
ngx_log_debug1(NGX_LOG_DEBUG_CORE, cycle->log, 0,
- "WaitForSingleObject: %ul", rc);
+ "WaitForMultipleObjects: %ul", rc);
switch (rc) {
@@ -126,6 +130,18 @@ ngx_spawn_process(ngx_cycle_t *cycle, char *name, ngx_int_t respawn)
break;
+ case WAIT_OBJECT_0 + 1:
+ if (GetExitCodeProcess(ctx.child, &code) == 0) {
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
+ "GetExitCodeProcess(%P) failed", pid);
+ }
+
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
+ "%s process %P exited with code %Xul",
+ name, pid, code);
+
+ goto failed;
+
case WAIT_TIMEOUT:
ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
"the event \"%s\" was not signaled for 5s",