Mercurial > hg > nginx-vendor-current
comparison src/http/modules/ngx_http_fastcgi_module.c @ 674:4dcaf40cc702 NGINX_1_3_0
nginx 1.3.0
*) Feature: the "debug_connection" directive now supports IPv6 addresses
and the "unix:" parameter.
*) Feature: the "set_real_ip_from" directive and the "proxy" parameter
of the "geo" directive now support IPv6 addresses.
*) Feature: the "real_ip_recursive", "geoip_proxy", and
"geoip_proxy_recursive" directives.
*) Feature: the "proxy_recursive" parameter of the "geo" directive.
*) Bugfix: a segmentation fault might occur in a worker process if the
"resolver" directive was used.
*) Bugfix: a segmentation fault might occur in a worker process if the
"fastcgi_pass", "scgi_pass", or "uwsgi_pass" directives were used and
backend returned incorrect response.
*) Bugfix: a segmentation fault might occur in a worker process if the
"rewrite" directive was used and new request arguments in a
replacement used variables.
*) Bugfix: nginx might hog CPU if the open file resource limit was
reached.
*) Bugfix: nginx might loop infinitely over backends if the
"proxy_next_upstream" directive with the "http_404" parameter was
used and there were backup servers specified in an upstream block.
*) Bugfix: adding the "down" parameter of the "server" directive might
cause unneeded client redistribution among backend servers if the
"ip_hash" directive was used.
*) Bugfix: socket leak.
Thanks to Yichun Zhang.
*) Bugfix: in the ngx_http_fastcgi_module.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Tue, 15 May 2012 00:00:00 +0400 |
parents | f41d4b305d22 |
children | 660139fd80ca |
comparison
equal
deleted
inserted
replaced
673:1e5c7a976f48 | 674:4dcaf40cc702 |
---|---|
617 u->create_request = ngx_http_fastcgi_create_request; | 617 u->create_request = ngx_http_fastcgi_create_request; |
618 u->reinit_request = ngx_http_fastcgi_reinit_request; | 618 u->reinit_request = ngx_http_fastcgi_reinit_request; |
619 u->process_header = ngx_http_fastcgi_process_header; | 619 u->process_header = ngx_http_fastcgi_process_header; |
620 u->abort_request = ngx_http_fastcgi_abort_request; | 620 u->abort_request = ngx_http_fastcgi_abort_request; |
621 u->finalize_request = ngx_http_fastcgi_finalize_request; | 621 u->finalize_request = ngx_http_fastcgi_finalize_request; |
622 r->state = 0; | |
622 | 623 |
623 u->buffering = 1; | 624 u->buffering = 1; |
624 | 625 |
625 u->pipe = ngx_pcalloc(r->pool, sizeof(ngx_event_pipe_t)); | 626 u->pipe = ngx_pcalloc(r->pool, sizeof(ngx_event_pipe_t)); |
626 if (u->pipe == NULL) { | 627 if (u->pipe == NULL) { |
1192 | 1193 |
1193 f->state = ngx_http_fastcgi_st_version; | 1194 f->state = ngx_http_fastcgi_st_version; |
1194 f->fastcgi_stdout = 0; | 1195 f->fastcgi_stdout = 0; |
1195 f->large_stderr = 0; | 1196 f->large_stderr = 0; |
1196 | 1197 |
1198 r->state = 0; | |
1199 | |
1197 return NGX_OK; | 1200 return NGX_OK; |
1198 } | 1201 } |
1199 | 1202 |
1200 | 1203 |
1201 static ngx_int_t | 1204 static ngx_int_t |
1351 | 1354 |
1352 return NGX_AGAIN; | 1355 return NGX_AGAIN; |
1353 } | 1356 } |
1354 | 1357 |
1355 } else { | 1358 } else { |
1356 f->state = ngx_http_fastcgi_st_version; | 1359 if (f->padding) { |
1360 f->state = ngx_http_fastcgi_st_padding; | |
1361 } else { | |
1362 f->state = ngx_http_fastcgi_st_version; | |
1363 } | |
1357 } | 1364 } |
1358 | 1365 |
1359 continue; | 1366 continue; |
1360 } | 1367 } |
1361 | 1368 |
1684 if (rc == NGX_ERROR) { | 1691 if (rc == NGX_ERROR) { |
1685 return NGX_ERROR; | 1692 return NGX_ERROR; |
1686 } | 1693 } |
1687 | 1694 |
1688 if (f->type == NGX_HTTP_FASTCGI_STDOUT && f->length == 0) { | 1695 if (f->type == NGX_HTTP_FASTCGI_STDOUT && f->length == 0) { |
1689 f->state = ngx_http_fastcgi_st_version; | 1696 |
1697 if (f->padding) { | |
1698 f->state = ngx_http_fastcgi_st_padding; | |
1699 } else { | |
1700 f->state = ngx_http_fastcgi_st_version; | |
1701 } | |
1690 | 1702 |
1691 if (!flcf->keep_conn) { | 1703 if (!flcf->keep_conn) { |
1692 p->upstream_done = 1; | 1704 p->upstream_done = 1; |
1693 } | 1705 } |
1694 | 1706 |
1697 | 1709 |
1698 continue; | 1710 continue; |
1699 } | 1711 } |
1700 | 1712 |
1701 if (f->type == NGX_HTTP_FASTCGI_END_REQUEST) { | 1713 if (f->type == NGX_HTTP_FASTCGI_END_REQUEST) { |
1702 f->state = ngx_http_fastcgi_st_version; | 1714 |
1715 if (f->padding) { | |
1716 f->state = ngx_http_fastcgi_st_padding; | |
1717 } else { | |
1718 f->state = ngx_http_fastcgi_st_version; | |
1719 } | |
1720 | |
1703 p->upstream_done = 1; | 1721 p->upstream_done = 1; |
1704 | 1722 |
1705 if (flcf->keep_conn) { | 1723 if (flcf->keep_conn) { |
1706 r->upstream->keepalive = 1; | 1724 r->upstream->keepalive = 1; |
1707 } | 1725 } |
1770 if (f->pos == f->last) { | 1788 if (f->pos == f->last) { |
1771 break; | 1789 break; |
1772 } | 1790 } |
1773 | 1791 |
1774 } else { | 1792 } else { |
1775 f->state = ngx_http_fastcgi_st_version; | 1793 if (f->padding) { |
1794 f->state = ngx_http_fastcgi_st_padding; | |
1795 } else { | |
1796 f->state = ngx_http_fastcgi_st_version; | |
1797 } | |
1776 } | 1798 } |
1777 | 1799 |
1778 continue; | 1800 continue; |
1779 } | 1801 } |
1780 | 1802 |