Mercurial > hg > nginx-ranges
diff src/core/ngx_output_chain.c @ 416:a8e3f1441eec NGINX_0_7_17
nginx 0.7.17
*) Feature: now the "directio" directive works on Linux.
*) Feature: the $pid variable.
*) Bugfix: the "directio" optimization that had appeared in 0.7.15 did
not work with open_file_cache.
*) Bugfix: the "access_log" with variables did not work on Linux; the
bug had appeared in 0.7.7.
*) Bugfix: the ngx_http_charset_module did not understand quoted
charset name received from backend.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 15 Sep 2008 00:00:00 +0400 |
parents | a2a3905c04ab |
children | ad0a34a8efa6 |
line wrap: on
line diff
--- a/src/core/ngx_output_chain.c +++ b/src/core/ngx_output_chain.c @@ -355,6 +355,10 @@ ngx_output_chain_align_file_buf(ngx_outp * to reuse the buf via ctx->free list */ +#if (NGX_HAVE_ALIGNED_DIRECTIO) + ctx->unaligned = 1; +#endif + return NGX_OK; } @@ -491,8 +495,41 @@ ngx_output_chain_copy_buf(ngx_output_cha } } else { + +#if (NGX_HAVE_ALIGNED_DIRECTIO) + + if (ctx->unaligned) { + if (ngx_directio_off(src->file->fd) == -1) { + ngx_log_error(NGX_LOG_ALERT, ctx->pool->log, ngx_errno, + ngx_directio_off_n " \"%s\" failed", + src->file->name.data); + } + } + +#endif + n = ngx_read_file(src->file, dst->pos, (size_t) size, src->file_pos); +#if (NGX_HAVE_ALIGNED_DIRECTIO) + + if (ctx->unaligned) { + ngx_err_t err; + + err = ngx_errno; + + if (ngx_directio_on(src->file->fd) == -1) { + ngx_log_error(NGX_LOG_ALERT, ctx->pool->log, ngx_errno, + ngx_directio_on_n " \"%s\" failed", + src->file->name.data); + } + + ngx_set_errno(err); + + ctx->unaligned = 0; + } + +#endif + if (n == NGX_ERROR) { return (ngx_int_t) n; } @@ -505,8 +542,8 @@ ngx_output_chain_copy_buf(ngx_output_cha if (n != size) { ngx_log_error(NGX_LOG_ALERT, ctx->pool->log, 0, - ngx_read_file_n " read only %z of %O from file", - n, size); + ngx_read_file_n " read only %z of %O from \"%s\"", + n, size, src->file->name.data); if (n == 0) { return NGX_ERROR; }