changeset 3431:4edce2b6b285 stable-0.7

merge r3163, r3213: *) fix discarding body *) prevent handling discarded body as a pipelined request
author Igor Sysoev <igor@sysoev.ru>
date Mon, 01 Feb 2010 14:42:38 +0000
parents 966f9cf9c7da
children 20871c5e1d5d
files src/http/ngx_http_request_body.c
diffstat 1 files changed, 7 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/http/ngx_http_request_body.c
+++ b/src/http/ngx_http_request_body.c
@@ -458,6 +458,7 @@ ngx_http_discard_request_body(ngx_http_r
 
     if (size) {
         if (r->headers_in.content_length_n > size) {
+            r->header_in->pos += size;
             r->headers_in.content_length_n -= size;
 
         } else {
@@ -559,12 +560,16 @@ ngx_http_read_discarded_request_body(ngx
     ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
                    "http read discarded body");
 
-    do {
+    for ( ;; ) {
         if (r->headers_in.content_length_n == 0) {
             r->read_event_handler = ngx_http_block_reading;
             return NGX_OK;
         }
 
+        if (!r->connection->read->ready) {
+            return NGX_AGAIN;
+        }
+
         size = (r->headers_in.content_length_n > NGX_HTTP_DISCARD_BUFFER_SIZE) ?
                    NGX_HTTP_DISCARD_BUFFER_SIZE:
                    (size_t) r->headers_in.content_length_n;
@@ -585,10 +590,7 @@ ngx_http_read_discarded_request_body(ngx
         }
 
         r->headers_in.content_length_n -= n;
-
-    } while (r->connection->read->ready);
-
-    return NGX_AGAIN;
+    }
 }