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). Reported by Oleksandr V. Typlyns'kyi.
This commit is contained in:
parent
b1a821099e
commit
d94c192db8
2 changed files with 13 additions and 8 deletions
|
@ -158,6 +158,11 @@ ngx_http_copy_filter(ngx_http_request_t *r, ngx_chain_t *in)
|
|||
ngx_file_t *file;
|
||||
ngx_http_ephemeral_t *e;
|
||||
|
||||
if (r->aio) {
|
||||
c->busy_sendfile = NULL;
|
||||
return rc;
|
||||
}
|
||||
|
||||
file = c->busy_sendfile->file;
|
||||
offset = c->busy_sendfile->file_pos;
|
||||
|
||||
|
|
|
@ -2248,7 +2248,8 @@ ngx_http_writer(ngx_http_request_t *r)
|
|||
return;
|
||||
}
|
||||
|
||||
} else {
|
||||
}
|
||||
|
||||
if (wev->delayed || r->aio) {
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, wev->log, 0,
|
||||
"http writer delayed");
|
||||
|
@ -2259,7 +2260,6 @@ ngx_http_writer(ngx_http_request_t *r)
|
|||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
rc = ngx_http_output_filter(r, NULL);
|
||||
|
||||
|
|
Loading…
Reference in a new issue