[PATCH] ngx_upstream do not cleanup file buffers in subrequest

magz nginx-forum at nginx.us
Tue Mar 8 23:24:47 MSK 2011


Hello,

Is it reasonable to add following check to not clean/discard fd in case
if it's sub request?

I developed nginx module and when it started to use tmp buffers under
load I had following error:

[alert] 29663#0: *45789 sendfile() failed (9: Bad file descriptor) while
sending request to upstream, client: 10.1.24.14, server: hss, request:
"POST 

So that sub-request cleared file before main request reached it. 
Probably this bug should not appear if  request body was discarded for
sub request. But  in case if you need request body for sub-request you
should be sure that sub-request does not erases main request buffers.


-- src/http/ngx_http_upstream.c_orig	2011-03-08 08:01:20.000000000
-0800
+++ src/http/ngx_http_upstream.c	2011-03-08 08:01:41.000000000 -0800
@@ -2033,7 +2033,7 @@ ngx_http_upstream_send_response(ngx_http
 
     u->header_sent = 1;
 
-    if (r->request_body && r->request_body->temp_file) {
+    if (r->request_body && r->request_body->temp_file && r == r->main)
{
         ngx_pool_run_cleanup_file(r->pool,
r->request_body->temp_file->file.fd);
         r->request_body->temp_file->file.fd = NGX_INVALID_FILE;
     }

Posted at Nginx Forum: http://forum.nginx.org/read.php?2,181400,181400#msg-181400




More information about the nginx mailing list