comparison src/http/ngx_http_copy_filter_module.c @ 4254:35861ba428d1 stable-1.0

Merging r4195, r4196: AIO related fixes: *) Fix for connection drops with AIO. Connections serving content with AIO to fast clients were dropped with "client timed out" messages after send_timeout from response start. *) Fix for socket leak with "aio sendfile" and "limit_rate". Second aio post happened when timer set by limit_rate expired while we have aio request in flight, resulting in "second aio post" alert and socket leak. The patch adds actual protection from aio calls with r->aio already set to aio sendfile code in ngx_http_copy_filter(). This should fix other cases as well, e.g. when sending buffered to disk upstream replies while still talking to upstream. The ngx_http_writer() is also fixed to handle the above case (though it's mostly optimization now).
author Igor Sysoev <igor@sysoev.ru>
date Tue, 01 Nov 2011 14:13:25 +0000
parents d29e8060ca0c
children d620f497c50f
comparison
equal deleted inserted replaced
4253:6efec8b1ff52 4254:35861ba428d1
156 ssize_t n; 156 ssize_t n;
157 off_t offset; 157 off_t offset;
158 ngx_file_t *file; 158 ngx_file_t *file;
159 ngx_http_ephemeral_t *e; 159 ngx_http_ephemeral_t *e;
160 160
161 if (r->aio) {
162 c->busy_sendfile = NULL;
163 return rc;
164 }
165
161 file = c->busy_sendfile->file; 166 file = c->busy_sendfile->file;
162 offset = c->busy_sendfile->file_pos; 167 offset = c->busy_sendfile->file_pos;
163 168
164 if (file->aio) { 169 if (file->aio) {
165 c->aio_sendfile = (offset != file->aio->last_offset); 170 c->aio_sendfile = (offset != file->aio->last_offset);