comparison src/os/unix/ngx_process_cycle.c @ 366:babd3d9efb62 NGINX_0_6_27

nginx 0.6.27 *) Change: now by default the rtsig method is not built on Linux 2.6.18+. *) Change: now a request method is not changed while redirection to a named location via an "error_page" directive. *) Feature: the "resolver" and "resolver_timeout" directives in SMTP proxy. *) Feature: the "post_action" directive supports named locations. *) Bugfix: a segmentation fault occurred in worker process, if a request was redirected from proxy, FastCGI, or memcached location to static named locations. *) Bugfix: browsers did not repeat SSL handshake if there is no valid client certificate in first handshake. Thanks to Alexander V. Inyukhin. *) Bugfix: if response code 495-497 was redirected via an "error_page" directive without code change, then nginx tried to allocate too many memory. *) Bugfix: memory leak in long-lived non buffered connections. *) Bugfix: memory leak in resolver. *) Bugfix: a segmentation fault occurred in worker process, if a request was redirected from proxy, FastCGI, or memcached location to static named locations. *) Bugfix: in the $proxy_host and $proxy_port variables caching. Thanks to Sergey Bochenkov. *) Bugfix: a "proxy_pass" directive with variables used incorrectly the same port as in another "proxy_pass" directive with the same host name and without variables. Thanks to Sergey Bochenkov. *) Bugfix: an alert "sendmsg() failed (9: Bad file descriptor)" on some 64-bit platforms while reconfiguration. *) Bugfix: a segmentation fault occurred in worker process, if empty stub block was used second time in SSI. *) Bugfix: in copying URI part contained escaped symbols into arguments.
author Igor Sysoev <http://sysoev.ru>
date Wed, 12 Mar 2008 00:00:00 +0300
parents b743d290eb3b
children 820f6378fc00
comparison
equal deleted inserted replaced
365:9b0140fa1132 366:babd3d9efb62
992 if (ngx_modules[i]->exit_process) { 992 if (ngx_modules[i]->exit_process) {
993 ngx_modules[i]->exit_process(cycle); 993 ngx_modules[i]->exit_process(cycle);
994 } 994 }
995 } 995 }
996 996
997 if (ngx_quit) { 997 if (ngx_exiting) {
998 c = cycle->connections; 998 c = cycle->connections;
999 for (i = 0; i < cycle->connection_n; i++) { 999 for (i = 0; i < cycle->connection_n; i++) {
1000 if (c[i].fd != -1 1000 if (c[i].fd != -1
1001 && c[i].read 1001 && c[i].read
1002 && !c[i].read->accept 1002 && !c[i].read->accept
1003 && !c[i].read->channel) 1003 && !c[i].read->channel
1004 && !c[i].read->resolver)
1004 { 1005 {
1005 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, 1006 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
1006 "open socket #%d left in %ui connection, " 1007 "open socket #%d left in %ui connection %s",
1007 "aborting", 1008 c[i].fd, i, ngx_debug_quit ? ", aborting" : "");
1008 c[i].fd, i);
1009 ngx_debug_point(); 1009 ngx_debug_point();
1010 } 1010 }
1011 } 1011 }
1012 1012
1013 if (ngx_debug_quit) { 1013 if (ngx_debug_quit) {
1057 n = ngx_read_channel(c->fd, &ch, sizeof(ngx_channel_t), ev->log); 1057 n = ngx_read_channel(c->fd, &ch, sizeof(ngx_channel_t), ev->log);
1058 1058
1059 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, "channel: %i", n); 1059 ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0, "channel: %i", n);
1060 1060
1061 if (n == NGX_ERROR) { 1061 if (n == NGX_ERROR) {
1062
1063 if (ngx_event_flags & NGX_USE_EPOLL_EVENT) {
1064 ngx_del_conn(c, 0);
1065 }
1066
1062 ngx_close_connection(c); 1067 ngx_close_connection(c);
1063 return; 1068 return;
1064 } 1069 }
1065 1070
1066 if (ngx_event_flags & NGX_USE_EVENTPORT_EVENT) { 1071 if (ngx_event_flags & NGX_USE_EVENTPORT_EVENT) {