From 5ec68f6453a0ed164a8fd73e024edb75344e967d Mon Sep 17 00:00:00 2001 From: Igor Sysoev Date: Wed, 28 Jul 2004 16:16:50 +0000 Subject: [PATCH] nginx-0.0.9-2004-07-28-20:16:50 import --- src/core/ngx_output_chain.c | 9 +++++++-- src/event/modules/ngx_rtsig_module.c | 20 +++++++++----------- src/http/ngx_http_write_filter.c | 10 ++++++++-- src/os/unix/ngx_freebsd_sendfile_chain.c | 1 - src/os/unix/ngx_linux_sendfile_chain.c | 1 - 5 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/core/ngx_output_chain.c b/src/core/ngx_output_chain.c index 02d780f37..549c9ad16 100644 --- a/src/core/ngx_output_chain.c +++ b/src/core/ngx_output_chain.c @@ -73,6 +73,13 @@ 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 */ @@ -91,8 +98,6 @@ ngx_int_t ngx_output_chain(ngx_output_chain_ctx_t *ctx, ngx_chain_t *in) if (ctx->in->buf->last_buf) { - bsize = ngx_buf_size(ctx->in->buf); - if (bsize < ctx->bufs.size) { /* diff --git a/src/event/modules/ngx_rtsig_module.c b/src/event/modules/ngx_rtsig_module.c index 3be8e6a8f..6a83e9c1b 100644 --- a/src/event/modules/ngx_rtsig_module.c +++ b/src/event/modules/ngx_rtsig_module.c @@ -626,20 +626,20 @@ static ngx_int_t ngx_rtsig_process_overflow(ngx_cycle_t *cycle) cycle->log, 0, "poll() failed while the overflow recover"); - if (err != NGX_EINTR) { - break; + if (err == NGX_EINTR) { + continue; } } + + break; } if (ready <= 0) { continue; } - if (n) { - if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { - return NGX_ERROR; - } + if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { + return NGX_ERROR; } for (i = 0; i < n; i++) { @@ -686,9 +686,7 @@ static ngx_int_t ngx_rtsig_process_overflow(ngx_cycle_t *cycle) } } - if (n) { - ngx_mutex_unlock(ngx_posted_events_mutex); - } + ngx_mutex_unlock(ngx_posted_events_mutex); if (tested >= rtscf->overflow_test) { @@ -723,7 +721,7 @@ static ngx_int_t ngx_rtsig_process_overflow(ngx_cycle_t *cycle) } /* - * drain rt signal queue if the /proc/sys/kernel/rtsig-nr + * drain the rt signal queue if the /proc/sys/kernel/rtsig-nr * is bigger than * /proc/sys/kernel/rtsig-max / rtsig_overflow_threshold */ @@ -741,7 +739,7 @@ static ngx_int_t ngx_rtsig_process_overflow(ngx_cycle_t *cycle) /* * Linux has not KERN_RTSIGMAX since 2.6.6-mm2 - * so drain rt signal queue unconditionally + * so drain the rt signal queue unconditionally */ while (ngx_rtsig_process_events(cycle) == NGX_OK) { /* void */ } diff --git a/src/http/ngx_http_write_filter.c b/src/http/ngx_http_write_filter.c index 2c0989d0a..c6cc6519a 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; + off_t size, flush, sent, bsize; ngx_chain_t *cl, *ln, **ll, *chain; ngx_connection_t *c; ngx_http_core_loc_conf_t *clcf; @@ -82,7 +82,13 @@ ngx_int_t ngx_http_write_filter(ngx_http_request_t *r, ngx_chain_t *in) *ll = cl; ll = &cl->next; - size += ngx_buf_size(cl->buf); + bsize = ngx_buf_size(cl->buf); + + if (bsize == 0 && cl->buf->in_file) { + cl->buf->in_file = 0; + } + + size += bsize; if (cl->buf->flush || cl->buf->recycled) { flush = size; diff --git a/src/os/unix/ngx_freebsd_sendfile_chain.c b/src/os/unix/ngx_freebsd_sendfile_chain.c index f79b79bc2..5227a21bd 100644 --- a/src/os/unix/ngx_freebsd_sendfile_chain.c +++ b/src/os/unix/ngx_freebsd_sendfile_chain.c @@ -120,7 +120,6 @@ ngx_chain_t *ngx_freebsd_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, if (cl && cl->buf->in_file && send < limit) { file = cl->buf; - fsize = 0; /* coalesce the neighbouring file bufs */ diff --git a/src/os/unix/ngx_linux_sendfile_chain.c b/src/os/unix/ngx_linux_sendfile_chain.c index 690631f31..48c09dffa 100644 --- a/src/os/unix/ngx_linux_sendfile_chain.c +++ b/src/os/unix/ngx_linux_sendfile_chain.c @@ -127,7 +127,6 @@ ngx_chain_t *ngx_linux_sendfile_chain(ngx_connection_t *c, ngx_chain_t *in, if (header.nelts == 0 && cl && cl->buf->in_file && send < limit) { file = cl->buf; - fsize = 0; /* coalesce the neighbouring file bufs */