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
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2007-03-19 16:20:15 +0300
committerIgor Sysoev <igor@sysoev.ru>2007-03-19 16:20:15 +0300
commit4ddeff4956a93efce34105588153f591f3fcfcbc (patch)
tree63e5d49a946d447ca0783647d939fe9bdf173b9e /src/os/unix/ngx_process_cycle.c
parente1f43ce292b0ca463748e13b067ea36bbe8ca9bc (diff)
close keep-alive connections in the shuting down processes
Diffstat (limited to 'src/os/unix/ngx_process_cycle.c')
-rw-r--r--src/os/unix/ngx_process_cycle.c27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c
index 1b6a0804c..90993966d 100644
--- a/src/os/unix/ngx_process_cycle.c
+++ b/src/os/unix/ngx_process_cycle.c
@@ -664,6 +664,8 @@ ngx_master_process_exit(ngx_cycle_t *cycle)
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 @@ ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data)
#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");
- ngx_worker_process_exit(cycle);
+ if (ngx_exiting) {
+
+ c = cycle->connections;
+
+ for (i = 0; i < cycle->connection_n; i++) {
+
+ /* THREAD: lock */
+
+ 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");