aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2004-07-28 19:21:26 +0000
committerIgor Sysoev <igor@sysoev.ru>2004-07-28 19:21:26 +0000
commit00d433f4f843a98fa93e21db158af9c62f7978c5 (patch)
tree481241c20abd57b96c78813f5651ed9dd80f5669 /src
parent5ec68f6453a0ed164a8fd73e024edb75344e967d (diff)
downloadnginx-00d433f4f843a98fa93e21db158af9c62f7978c5.tar.gz
nginx-00d433f4f843a98fa93e21db158af9c62f7978c5.zip
nginx-0.0.9-2004-07-28-23:21:26 import
Diffstat (limited to 'src')
-rw-r--r--src/core/ngx_output_chain.c18
-rw-r--r--src/http/modules/ngx_http_static_handler.c24
-rw-r--r--src/http/ngx_http_write_filter.c10
3 files changed, 30 insertions, 22 deletions
diff --git a/src/core/ngx_output_chain.c b/src/core/ngx_output_chain.c
index 549c9ad16..db4321bc0 100644
--- a/src/core/ngx_output_chain.c
+++ b/src/core/ngx_output_chain.c
@@ -59,6 +59,17 @@ ngx_int_t ngx_output_chain(ngx_output_chain_ctx_t *ctx, ngx_chain_t *in)
* or there are the free output bufs to copy in
*/
+ bsize = ngx_buf_size(ctx->in->buf);
+
+ if (bsize == 0 && !ngx_buf_special(ctx->in->buf)) {
+
+ ngx_log_error(NGX_LOG_ALERT, ctx->pool->log, 0,
+ "zero size buf");
+
+ ctx->in = ctx->in->next;
+ continue;
+ }
+
if (!ngx_output_chain_need_to_copy(ctx, ctx->in->buf)) {
/* move the chain link to the output chain */
@@ -73,13 +84,6 @@ ngx_int_t ngx_output_chain(ngx_output_chain_ctx_t *ctx, ngx_chain_t *in)
continue;
}
- bsize = ngx_buf_size(ctx->in->buf);
-
- if (bsize == 0) {
- ctx->in = ctx->in->next;
- continue;
- }
-
if (ctx->buf == NULL) {
/* get the free buf */
diff --git a/src/http/modules/ngx_http_static_handler.c b/src/http/modules/ngx_http_static_handler.c
index 9a1a814ef..cf942ad24 100644
--- a/src/http/modules/ngx_http_static_handler.c
+++ b/src/http/modules/ngx_http_static_handler.c
@@ -483,22 +483,32 @@ static ngx_int_t ngx_http_static_handler(ngx_http_request_t *r)
r->headers_out.content_length_n = ngx_file_size(&fi);
r->headers_out.last_modified_time = ngx_file_mtime(&fi);
+ if (r->headers_out.content_length_n == 0) {
+ r->header_only = 1;
+ }
+
if (ngx_http_set_content_type(r) != NGX_OK) {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
+#if (NGX_SUPPRESS_WARN)
+ b = NULL;
+#endif
- /* we need to allocate all before the header would be sent */
+ if (!r->header_only) {
+ /* we need to allocate all before the header would be sent */
- if (!(b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t)))) {
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
- }
+ if (!(b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t)))) {
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
+ }
- if (!(b->file = ngx_pcalloc(r->pool, sizeof(ngx_file_t)))) {
- return NGX_HTTP_INTERNAL_SERVER_ERROR;
+ if (!(b->file = ngx_pcalloc(r->pool, sizeof(ngx_file_t)))) {
+ return NGX_HTTP_INTERNAL_SERVER_ERROR;
+ }
+
+ r->filter_allow_ranges = 1;
}
- r->filter_allow_ranges = 1;
rc = ngx_http_send_header(r);
if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) {
diff --git a/src/http/ngx_http_write_filter.c b/src/http/ngx_http_write_filter.c
index c6cc6519a..2c0989d0a 100644
--- a/src/http/ngx_http_write_filter.c
+++ b/src/http/ngx_http_write_filter.c
@@ -40,7 +40,7 @@ ngx_module_t ngx_http_write_filter_module = {
ngx_int_t ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *in)
{
int last;
- off_t size, flush, sent, bsize;
+ off_t size, flush, sent;
ngx_chain_t *cl, *ln, **ll, *chain;
ngx_connection_t *c;
ngx_http_core_loc_conf_t *clcf;
@@ -82,13 +82,7 @@ ngx_int_t ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *in)
*ll = cl;
ll = &cl->next;
- bsize = ngx_buf_size(cl->buf);
-
- if (bsize == 0 && cl->buf->in_file) {
- cl->buf->in_file = 0;
- }
-
- size += bsize;
+ size += ngx_buf_size(cl->buf);
if (cl->buf->flush || cl->buf->recycled) {
flush = size;