Mercurial > hg > nginx
diff src/core/ngx_output_chain.c @ 2129:25add486e7aa
directio
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 30 Jul 2008 12:34:04 +0000 |
parents | 3091e5d770a6 |
children | 61a09532e310 |
line wrap: on
line diff
--- a/src/core/ngx_output_chain.c +++ b/src/core/ngx_output_chain.c @@ -32,6 +32,7 @@ ngx_output_chain(ngx_output_chain_ctx_t size_t size; ngx_int_t rc, last; ngx_uint_t recycled; + ngx_buf_t *b; ngx_chain_t *cl, *out, **last_out; if (ctx->in == NULL && ctx->busy == NULL) { @@ -161,13 +162,29 @@ ngx_output_chain(ngx_output_chain_ctx_t } } - ctx->buf = ngx_create_temp_buf(ctx->pool, size); - if (ctx->buf == NULL) { + b = ngx_calloc_buf(ctx->pool); + if (b == NULL) { return NGX_ERROR; } - ctx->buf->tag = ctx->tag; - ctx->buf->recycled = recycled; + /* + * allocate block aligned to a disk sector size + * to enable O_DIRECT + */ + + b->start = ngx_pmemalign(ctx->pool, size, 512); + if (b->start == NULL) { + return NGX_ERROR; + } + + b->pos = b->start; + b->last = b->start; + b->end = b->last + size; + b->temporary = 1; + b->tag = ctx->tag; + b->recycled = recycled; + + ctx->buf = b; ctx->allocated++; } }