diff src/http/ngx_http_write_filter_module.c @ 184:71ff1e2b484a NGINX_0_3_39

nginx 0.3.39 *) Feature: the "uninitialized_variable_warn" directive; the logging level of the "uninitialized variable" message was lowered from "alert" to "warn". *) Feature: the "override_charset" directive. *) Change: now if the unknown variable is used in the "echo" and "if expr='$name'" SSI-commands, then the "unknown variable" message is not logged. *) Bugfix: the active connection counter increased on the exceeding of the connection limit specified by the "worker_connections" directive; bug appeared in 0.2.0. *) Bugfix: the limit rate might not work on some condition; bug appeared in 0.3.38.
author Igor Sysoev <http://sysoev.ru>
date Mon, 17 Apr 2006 00:00:00 +0400
parents 13710a1813ad
children 14050d2bec9b
line wrap: on
line diff
--- a/src/http/ngx_http_write_filter_module.c
+++ b/src/http/ngx_http_write_filter_module.c
@@ -209,9 +209,20 @@ ngx_http_write_filter(ngx_http_request_t
         return NGX_ERROR;
     }
 
-    to_send = r->limit_rate * (ngx_time() - r->start_time + 1) - c->sent;
+    if (r->limit_rate) {
+        to_send = r->limit_rate * (ngx_time() - r->start_time + 1) - c->sent;
 
-    if (to_send < 0) {
+        if (to_send <= 0) {
+            c->write->delayed = 1;
+            ngx_add_timer(r->connection->write,
+                       (ngx_msec_t) (- to_send * 1000 / r->limit_rate));
+
+            c->buffered |= NGX_HTTP_WRITE_BUFFERED;
+
+            return NGX_AGAIN;
+        }
+
+    } else {
         to_send = 0;
     }