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 */
if (ctx->in->buf->last_buf) {
- bsize = ngx_buf_size(ctx->in->buf);
-
if (bsize < ctx->bufs.size) {
/*
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++) {
}
}
- if (n) {
- ngx_mutex_unlock(ngx_posted_events_mutex);
- }
+ ngx_mutex_unlock(ngx_posted_events_mutex);
if (tested >= rtscf->overflow_test) {
}
/*
- * 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
*/
/*
* 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 */ }
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;
*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;
if (cl && cl->buf->in_file && send < limit) {
file = cl->buf;
- fsize = 0;
/* coalesce the neighbouring file bufs */
if (header.nelts == 0 && cl && cl->buf->in_file && send < limit) {
file = cl->buf;
- fsize = 0;
/* coalesce the neighbouring file bufs */