diff src/http/ngx_http_write_filter_module.c @ 76:da9a3b14312d NGINX_0_1_38

nginx 0.1.38 *) Feature: the "limit_rate" directive is supported in in proxy and FastCGI mode. *) Feature: the "X-Accel-Limit-Rate" response header line is supported in proxy and FastCGI mode. *) Feature: the "break" directive. *) Feature: the "log_not_found" directive. *) Bugfix: the response status code was not changed when request was redirected by the ""X-Accel-Redirect" header line. *) Bugfix: the variables set by the "set" directive could not be used in SSI. *) Bugfix: the segmentation fault may occurred if the SSI page has more than one remote subrequest. *) Bugfix: nginx treated the backend response as invalid if the status line in the header was transferred in two packets; bug appeared in 0.1.29. *) Feature: the "ssi_types" directive. *) Feature: the "autoindex_exact_size" directive. *) Bugfix: the ngx_http_autoindex_module did not support the long file names in UTF-8. *) Feature: the IMAP/POP3 proxy.
author Igor Sysoev <http://sysoev.ru>
date Fri, 08 Jul 2005 00:00:00 +0400
parents 0790a8599248
children 71c46860eb55
line wrap: on
line diff
--- a/src/http/ngx_http_write_filter_module.c
+++ b/src/http/ngx_http_write_filter_module.c
@@ -47,6 +47,12 @@ ngx_http_write_filter(ngx_http_request_t
     ngx_connection_t          *c;
     ngx_http_core_loc_conf_t  *clcf;
 
+    c = r->connection;
+
+    if (c->closed) {
+        return NGX_ERROR;
+    }
+
     size = 0;
     flush = 0;
     last = 0;
@@ -151,8 +157,6 @@ ngx_http_write_filter(ngx_http_request_t
 
     *ll = NULL;
 
-    c = r->connection;
-
     ngx_log_debug3(NGX_LOG_DEBUG_HTTP, c->log, 0,
                    "http write filter: l:%d f:%d s:%O", last, flush, size);
 
@@ -197,19 +201,20 @@ ngx_http_write_filter(ngx_http_request_t
 
     sent = c->sent;
 
-    chain = c->send_chain(c, r->out, clcf->limit_rate);
+    chain = c->send_chain(c, r->out, r->limit_rate);
 
     ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
                    "http write filter %p", chain);
 
-    if (clcf->limit_rate) {
+    if (r->limit_rate) {
         sent = c->sent - sent;
         c->write->delayed = 1;
         ngx_add_timer(r->connection->write,
-                      (ngx_msec_t) (sent * 1000 / clcf->limit_rate));
+                      (ngx_msec_t) (sent * 1000 / r->limit_rate));
     }
 
     if (chain == NGX_CHAIN_ERROR) {
+        c->closed = 1;
         return NGX_ERROR;
     }