Mercurial > hg > nginx
diff src/os/unix/ngx_process_cycle.c @ 1135:03f1133f24e8
close keep-alive connections in the shuting down processes
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 19 Mar 2007 13:20:15 +0000 |
parents | 384c92c210f9 |
children | df2592d32e49 |
line wrap: on
line diff
--- a/src/os/unix/ngx_process_cycle.c Wed Mar 07 10:25:16 2007 +0000 +++ b/src/os/unix/ngx_process_cycle.c Mon Mar 19 13:20:15 2007 +0000 @@ -664,6 +664,8 @@ static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data) { + ngx_uint_t i; + ngx_connection_t *c; #if (NGX_THREADS) ngx_int_t n; ngx_err_t err; @@ -717,12 +719,27 @@ #endif for ( ;; ) { - if (ngx_exiting - && ngx_event_timer_rbtree.root == ngx_event_timer_rbtree.sentinel) - { - ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting"); + + if (ngx_exiting) { + + c = cycle->connections; + + for (i = 0; i < cycle->connection_n; i++) { + + /* THREAD: lock */ - ngx_worker_process_exit(cycle); + if (c[i].fd != -1 && c[i].idle) { + c[i].close = 1; + c[i].read->handler(c[i].read); + } + } + + if (ngx_event_timer_rbtree.root == ngx_event_timer_rbtree.sentinel) + { + ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting"); + + ngx_worker_process_exit(cycle); + } } ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle");