diff src/http/ngx_http_write_filter_module.c @ 635:18268abd340c release-0.3.39

nginx-0.3.39-RELEASE import *) 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; the bug had appeared in 0.2.0. *) Bugfix: the limit rate might not work on some condition; the bug had appeared in 0.3.38.
author Igor Sysoev <igor@sysoev.ru>
date Mon, 17 Apr 2006 19:55:41 +0000
parents f971949ffb58
children 9079ee4735ae
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;
     }