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