From 83f00adc9b03197efac7e6b1c0100df6a7e4052f Mon Sep 17 00:00:00 2001 From: Maxim Dounin Date: Mon, 27 Oct 2014 21:14:07 +0300 Subject: [PATCH] Cache: c->reading flag introduced. It replaces c->buf in checks in ngx_http_file_cache_open(), making it possible to reopen the file without clearing c->buf. No functional changes. --- src/http/ngx_http_cache.h | 1 + src/http/ngx_http_file_cache.c | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/http/ngx_http_cache.h b/src/http/ngx_http_cache.h index a5886631b..b65fd493f 100644 --- a/src/http/ngx_http_cache.h +++ b/src/http/ngx_http_cache.h @@ -101,6 +101,7 @@ struct ngx_http_cache_s { unsigned updating:1; unsigned exists:1; unsigned temp_file:1; + unsigned reading:1; }; diff --git a/src/http/ngx_http_file_cache.c b/src/http/ngx_http_file_cache.c index e1b16e9c6..60ca6e42b 100644 --- a/src/http/ngx_http_file_cache.c +++ b/src/http/ngx_http_file_cache.c @@ -259,7 +259,7 @@ ngx_http_file_cache_open(ngx_http_request_t *r) return NGX_AGAIN; } - if (c->buf) { + if (c->reading) { return ngx_http_file_cache_read(r, c); } @@ -620,9 +620,12 @@ ngx_http_file_cache_aio_read(ngx_http_request_t *r, ngx_http_cache_t *c) n = ngx_file_aio_read(&c->file, c->buf->pos, c->body_start, 0, r->pool); if (n != NGX_AGAIN) { + c->reading = 0; return n; } + c->reading = 1; + c->file.aio->data = r; c->file.aio->handler = ngx_http_cache_aio_event_handler;