]> git.kaiwu.me - nginx.git/commitdiff
Upstream: r->upstream->length type change to off_t.
authorMaxim Dounin <mdounin@mdounin.ru>
Thu, 15 Sep 2011 18:43:19 +0000 (18:43 +0000)
committerMaxim Dounin <mdounin@mdounin.ru>
Thu, 15 Sep 2011 18:43:19 +0000 (18:43 +0000)
Previous use of size_t may cause wierd effects on 32bit platforms with certain
big responses transferred in unbuffered mode.

Nuke "if (size > u->length)" check as it's not usefull anyway (preread
body data isn't subject to this check) and now requires additional check
for u->length being positive.

src/http/modules/ngx_http_memcached_module.c
src/http/ngx_http_upstream.c
src/http/ngx_http_upstream.h

index beafb6af8073dd1af5ebed89b4d8e93a3bbdaa4c..cdc586964d3425258a7c73dd03168d104ed404c8 100644 (file)
@@ -407,7 +407,7 @@ ngx_http_memcached_filter(void *data, ssize_t bytes)
     u = ctx->request->upstream;
     b = &u->buffer;
 
-    if (u->length == ctx->rest) {
+    if (u->length == (ssize_t) ctx->rest) {
 
         if (ngx_strncmp(b->last,
                    ngx_http_memcached_end + NGX_HTTP_MEMCACHED_END - ctx->rest,
index faf69ecd487f769c1c3bece7d00e074222ce0c42..f3730a0631e1423f119e68e1cb50f3cf1bbf0c71 100644 (file)
@@ -1942,12 +1942,7 @@ ngx_http_upstream_process_headers(ngx_http_request_t *r, ngx_http_upstream_t *u)
 
     r->headers_out.content_length_n = u->headers_in.content_length_n;
 
-    if (u->headers_in.content_length_n != -1) {
-        u->length = (size_t) u->headers_in.content_length_n;
-
-    } else {
-        u->length = NGX_MAX_SIZE_T_VALUE;
-    }
+    u->length = u->headers_in.content_length_n;
 
     return NGX_OK;
 }
@@ -2419,10 +2414,6 @@ ngx_http_upstream_process_non_buffered_request(ngx_http_request_t *r,
 
         size = b->end - b->last;
 
-        if (size > u->length) {
-            size = u->length;
-        }
-
         if (size && upstream->read->ready) {
 
             n = upstream->recv(upstream, b->last, size);
@@ -2519,7 +2510,7 @@ ngx_http_upstream_non_buffered_filter(void *data, ssize_t bytes)
     cl->buf->last = b->last;
     cl->buf->tag = u->output.tag;
 
-    if (u->length == NGX_MAX_SIZE_T_VALUE) {
+    if (u->length == -1) {
         return NGX_OK;
     }
 
index fa848c0d3c5a624e57850115bee556102c777827..c3f706e142460a810586cedc2ca0a0ee50c13ede 100644 (file)
@@ -267,7 +267,7 @@ struct ngx_http_upstream_s {
     ngx_http_upstream_resolved_t    *resolved;
 
     ngx_buf_t                        buffer;
-    size_t                           length;
+    off_t                            length;
 
     ngx_chain_t                     *out_bufs;
     ngx_chain_t                     *busy_bufs;