last = ctx->output_filter(ctx->filter_ctx, out);        if (last == NGX_ERROR || last == NGX_DONE) {            return last;        }        ngx_chain_update_chains(ctx->pool, &ctx->free, &ctx->busy, &out,                                ctx->tag);        last_out = &out;    }}static ngx_inline ngx_int_tngx_output_chain_as_is(ngx_output_chain_ctx_t *ctx, ngx_buf_t *buf){    ngx_uint_t  sendfile;    if (ngx_buf_special(buf)) {        return 1;    }#if (NGX_THREADS)    if (buf->in_file) {        buf->file->thread_handler = ctx->thread_handler;        buf->file->thread_ctx = ctx->filter_ctx;    }#endif    if (buf->in_file && buf->file->directio) {        return 0;    }    sendfile = ctx->sendfile;#if (NGX_SENDFILE_LIMIT)    if (buf->in_file && buf->file_pos >= NGX_SENDFILE_LIMIT) {        sendfile = 0;    }#endif    if (!sendfile) {        if (!ngx_buf_in_memory(buf)) {            return 0;        }        buf->in_file = 0;    }#if (NGX_HAVE_AIO_SENDFILE)    if (ctx->aio_preload && buf->in_file) {        (void) ngx_output_chain_aio_setup(ctx, buf->file);    }#endif    if (ctx->need_in_memory && !ngx_buf_in_memory(buf)) {        return 0;    }    if (ctx->need_in_temp && (buf->memory || buf->mmap)) {        return 0;    }    return 1;}