Mercurial > hg > nginx
changeset 6124:f1f222db290b
Stream: prevent repeated event notifications after eof.
When client or upstream connection is closed, level-triggered read event
remained active until the end of the session leading to cpu hog. Now the flag
NGX_CLOSE_EVENT is used to unschedule the event.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Wed, 22 Apr 2015 19:55:04 +0300 |
parents | caa103acf180 |
children | 4dc8e7b62216 |
files | src/stream/ngx_stream_proxy_module.c |
diffstat | 1 files changed, 4 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/stream/ngx_stream_proxy_module.c Wed Apr 22 18:37:34 2015 +0300 +++ b/src/stream/ngx_stream_proxy_module.c Wed Apr 22 19:55:04 2015 +0300 @@ -814,6 +814,7 @@ size_t size; ssize_t n; ngx_buf_t *b; + ngx_uint_t flags; ngx_connection_t *c, *pc, *src, *dst; ngx_log_handler_pt handler; ngx_stream_upstream_t *u; @@ -911,7 +912,9 @@ return NGX_DONE; } - if (ngx_handle_read_event(src->read, 0) != NGX_OK) { + flags = src->read->eof ? NGX_CLOSE_EVENT : 0; + + if (ngx_handle_read_event(src->read, flags) != NGX_OK) { ngx_stream_proxy_finalize(s, NGX_ERROR); return NGX_ERROR; }