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_t⏎ ngx_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;⏎ }⏎