Mercurial > hg > nginx
changeset 322:ab2f8c9a2a45
nginx-0.0.3-2004-04-20-11:00:43 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 20 Apr 2004 07:00:43 +0000 |
parents | 32847588a82a |
children | ba876b26b76d |
files | src/http/modules/ngx_http_gzip_filter.c src/os/unix/ngx_errno.h src/os/unix/ngx_process_cycle.c |
diffstat | 3 files changed, 29 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/src/http/modules/ngx_http_gzip_filter.c Mon Apr 19 16:36:08 2004 +0000 +++ b/src/http/modules/ngx_http_gzip_filter.c Tue Apr 20 07:00:43 2004 +0000 @@ -502,7 +502,7 @@ ctx->in_hunk = ctx->in->hunk; ctx->in = ctx->in->next; - ctx->zstream.next_in = (u_char *) ctx->in_hunk->pos; + ctx->zstream.next_in = ctx->in_hunk->pos; ctx->zstream.avail_in = ctx->in_hunk->last - ctx->in_hunk->pos; if (ctx->in_hunk->type & NGX_HUNK_LAST) { @@ -543,7 +543,7 @@ break; } - ctx->zstream.next_out = (u_char *) ctx->out_hunk->pos; + ctx->zstream.next_out = ctx->out_hunk->pos; ctx->zstream.avail_out = conf->bufs.size; }
--- a/src/os/unix/ngx_errno.h Mon Apr 19 16:36:08 2004 +0000 +++ b/src/os/unix/ngx_errno.h Tue Apr 20 07:00:43 2004 +0000 @@ -9,6 +9,7 @@ typedef int ngx_err_t; #define NGX_ENOENT ENOENT +#define NGX_ESRCH ESRCH #define NGX_EINTR EINTR #define NGX_ECHILD ECHILD #define NGX_EACCES EACCES
--- a/src/os/unix/ngx_process_cycle.c Mon Apr 19 16:36:08 2004 +0000 +++ b/src/os/unix/ngx_process_cycle.c Tue Apr 20 07:00:43 2004 +0000 @@ -326,6 +326,7 @@ static void ngx_signal_worker_processes(ngx_cycle_t *cycle, int signo) { ngx_uint_t i; + ngx_err_t err; for (i = 0; i < ngx_last_process; i++) { @@ -349,9 +350,17 @@ ngx_processes[i].pid, signo); if (kill(ngx_processes[i].pid, signo) == -1) { - ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, + err = ngx_errno; + ngx_log_error(NGX_LOG_ALERT, cycle->log, err, "kill(%d, %d) failed", ngx_processes[i].pid, signo); + + if (err == NGX_ESRCH) { + ngx_processes[i].exited = 1; + ngx_processes[i].exiting = 0; + ngx_reap = 1; + } + continue; } @@ -368,6 +377,8 @@ ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exit"); + ngx_destroy_pool(cycle->pool); + exit(0); } @@ -375,7 +386,7 @@ static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data) { sigset_t set; - ngx_uint_t i; + ngx_uint_t i, exiting; ngx_listening_t *ls; ngx_core_conf_t *ccf; #if (NGX_THREADS) @@ -463,13 +474,22 @@ #endif + exiting = 0; + for ( ;; ) { + if (exiting && ngx_event_timer_rbtree == &ngx_event_timer_sentinel) { + ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exiting"); + ngx_destroy_pool(cycle->pool); + exit(0); + } + ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle"); ngx_process_events(cycle); if (ngx_terminate) { ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exiting"); + ngx_destroy_pool(cycle->pool); exit(0); } @@ -477,27 +497,12 @@ ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "gracefully shutting down"); ngx_setproctitle("worker process is shutting down"); - break; - } - if (ngx_reopen) { - ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "reopen logs"); - ngx_reopen_files(cycle, -1); - ngx_reopen = 0; + if (!exiting) { + ngx_close_listening_sockets(cycle); + exiting = 1; + } } - } - - ngx_close_listening_sockets(cycle); - - for ( ;; ) { - if (ngx_event_timer_rbtree == &ngx_event_timer_sentinel) { - ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exiting"); - exit(0); - } - - ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle"); - - ngx_process_events(cycle); if (ngx_reopen) { ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "reopen logs");