Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Upstream: fix proxy_store/fastcgi_store leaving temporary files.
On Mon, Apr 27, 2009 at 01:35:14AM +0400, Maxim Dounin wrote:
> Hello!
>
> Патч.
>
> Исправляет проблему, из-за которой при использовании
> proxy_store/fastcgi_store могли оставаться временные файлы в
> proxy_temp_path/fastcgi_temp_path если клиент закрывал соединение
> преждевременно.
>
> Спасибо Михаилу Монашёву за неиссякаемый источник клиентов,
> закрывающих соединение в самые неожиданные моменты :), а равно за
> спонсирование и тестирования патча в боевых условиях.
Спасибо, не мог ты проверить несколько модифицированный патч ?
--
Игорь Сысоев
http://sysoev.ru
Index: src/http/ngx_http_upstream.c
===================================================================
--- src/http/ngx_http_upstream.c (revision 2075)
+++ src/http/ngx_http_upstream.c (working copy)
@@ -353,7 +353,9 @@
u = r->upstream;
- if (!r->post_action && !u->conf->ignore_client_abort) {
+ u->store = (u->conf->store || u->conf->store_lengths);
+
+ if (!u->store && !r->post_action && !u->conf->ignore_client_abort) {
r->read_event_handler = ngx_http_upstream_rd_check_broken_connection;
r->write_event_handler = ngx_http_upstream_wr_check_broken_connection;
}
@@ -439,8 +441,6 @@
cln->data = r;
u->cleanup = &cln->handler;
- u->store = (u->conf->store || u->conf->store_lengths);
-
if (u->resolved == NULL) {
uscf = u->conf->upstream;
@@ -779,8 +779,10 @@
u = r->upstream;
if (c->error) {
- ngx_http_upstream_finalize_request(r, u,
- NGX_HTTP_CLIENT_CLOSED_REQUEST);
+ if (!u->cacheable) {
+ ngx_http_upstream_finalize_request(r, u,
+ NGX_HTTP_CLIENT_CLOSED_REQUEST);
+ }
return;
}
@@ -803,7 +805,7 @@
ev->error = 1;
}
- if (!u->cacheable && !u->store && u->peer.connection) {
+ if (!u->cacheable && u->peer.connection) {
ngx_log_error(NGX_LOG_INFO, ev->log, ev->kq_errno,
"kevent() reported that client closed prematurely "
"connection, so upstream connection is closed too");
@@ -869,7 +871,7 @@
ev->eof = 1;
c->error = 1;
- if (!u->cacheable && !u->store && u->peer.connection) {
+ if (!u->cacheable && u->peer.connection) {
ngx_log_error(NGX_LOG_INFO, ev->log, err,
"client closed prematurely connection, "
"so upstream connection is closed too");
@@ -2486,7 +2488,7 @@
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
"http upstream downstream error");
- if (!u->cacheable && u->peer.connection) {
+ if (!u->cacheable && !u->store && u->peer.connection) {
ngx_http_upstream_finalize_request(r, u, 0);
}
}
|