Mercurial > hg > nginx-vendor-1-0
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) { |