comparison src/http/ngx_http_upstream.c @ 276:c5c2b2883984 NGINX_0_5_8

nginx 0.5.8 *) Bugfix: a segmentation fault might occur if "client_body_in_file_only on" was used and a request body was small. *) Bugfix: a segmentation fault occurred if "client_body_in_file_only on" and "proxy_pass_request_body off" or "fastcgi_pass_request_body off" directives were used, and nginx switched to a next upstream. *) Bugfix: if the "proxy_buffering off" directive was used and a client connection was non-active, then the connection was closed after send timeout; bug appeared in 0.4.7. *) Bugfix: if the "epoll" method was used and a client closed a connection prematurely, then nginx closed the connection after a send timeout only. *) Bugfix: the "[alert] zero size buf" error when FastCGI server was used. *) Bugfixes in the "limit_zone" directive.
author Igor Sysoev <http://sysoev.ru>
date Fri, 19 Jan 2007 00:00:00 +0300
parents 052a7b1d40e5
children 3dbecd747fbb
comparison
equal deleted inserted replaced
275:1779577cb845 276:c5c2b2883984
567 NGX_HTTP_INTERNAL_SERVER_ERROR); 567 NGX_HTTP_INTERNAL_SERVER_ERROR);
568 return; 568 return;
569 } 569 }
570 } 570 }
571 571
572 if (r->request_body && r->request_body->temp_file && r == r->main) { 572 if (r->request_body
573 573 && r->request_body->buf
574 && r->request_body->temp_file
575 && r == r->main)
576 {
574 /* 577 /*
575 * the r->request_body->buf can be reused for one request only, 578 * the r->request_body->buf can be reused for one request only,
576 * the subrequests should allocate their own temporay bufs 579 * the subrequests should allocate their own temporay bufs
577 */ 580 */
578 581
1698 ngx_http_upstream_finalize_request(r, u, 0); 1701 ngx_http_upstream_finalize_request(r, u, 0);
1699 return; 1702 return;
1700 } 1703 }
1701 } 1704 }
1702 1705
1703 if (downstream->write->active) { 1706 if (downstream->write->active && !downstream->write->ready) {
1704 ngx_add_timer(downstream->write, clcf->send_timeout); 1707 ngx_add_timer(downstream->write, clcf->send_timeout);
1705 1708
1706 } else if (downstream->write->timer_set) { 1709 } else if (downstream->write->timer_set) {
1707 ngx_del_timer(downstream->write); 1710 ngx_del_timer(downstream->write);
1708 } 1711 }
1710 if (ngx_handle_read_event(upstream->read, 0) == NGX_ERROR) { 1713 if (ngx_handle_read_event(upstream->read, 0) == NGX_ERROR) {
1711 ngx_http_upstream_finalize_request(r, u, 0); 1714 ngx_http_upstream_finalize_request(r, u, 0);
1712 return; 1715 return;
1713 } 1716 }
1714 1717
1715 if (upstream->read->active) { 1718 if (upstream->read->active && !upstream->read->ready) {
1716 ngx_add_timer(upstream->read, u->conf->read_timeout); 1719 ngx_add_timer(upstream->read, u->conf->read_timeout);
1717 1720
1718 } else if (upstream->read->timer_set) { 1721 } else if (upstream->read->timer_set) {
1719 ngx_del_timer(upstream->read); 1722 ngx_del_timer(upstream->read);
1720 } 1723 }