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;
}