Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nginx/nginx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2014-12-02 05:54:56 +0300
committerMaxim Dounin <mdounin@mdounin.ru>2014-12-02 05:54:56 +0300
commit6d52912a2a98eb3340564cf0b0627194a978d152 (patch)
treecdfa7beb6fa7c1fead6c51546aaeec894c82789a
parent10345663c8d7d011ae186fb22d5fdf9a1912b80d (diff)
Cache: proper wakeup of subrequests.
In case of a cache lock timeout and in the aio handler we now call r->write_event_handler() instead of a connection write handler, to make sure to run appropriate subrequest. Previous code failed to run inactive subrequests and hence resulted in suboptimal behaviour, see report by Yichun Zhang: http://mailman.nginx.org/pipermail/nginx-devel/2013-October/004435.html (Infinite hang claimed in the report seems impossible without 3rd party modules, as subrequests will be eventually woken up by the postpone filter.)
-rw-r--r--src/http/ngx_http_file_cache.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/http/ngx_http_file_cache.c b/src/http/ngx_http_file_cache.c
index af0423ad2..c3f4f05d2 100644
--- a/src/http/ngx_http_file_cache.c
+++ b/src/http/ngx_http_file_cache.c
@@ -462,6 +462,8 @@ ngx_http_file_cache_lock_wait_handler(ngx_event_t *ev)
"http file cache wait: \"%V?%V\"", &r->uri, &r->args);
ngx_http_file_cache_lock_wait(r, r->cache);
+
+ ngx_http_run_posted_requests(c);
}
@@ -505,7 +507,7 @@ wakeup:
c->waiting = 0;
r->main->blocked--;
- r->connection->write->handler(r->connection->write);
+ r->write_event_handler(r);
}
@@ -692,7 +694,9 @@ ngx_http_cache_aio_event_handler(ngx_event_t *ev)
r->main->blocked--;
r->aio = 0;
- r->connection->write->handler(r->connection->write);
+ r->write_event_handler(r);
+
+ ngx_http_run_posted_requests(c);
}
#endif