# HG changeset patch # User Roman Arutyunyan # Date 1429721704 -10800 # Node ID f1f222db290b9eb72cfb54b0b94cfb622b0f54e6 # Parent caa103acf18018c5931b8f0ee304f2cdde704786 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. diff --git a/src/stream/ngx_stream_proxy_module.c b/src/stream/ngx_stream_proxy_module.c --- a/src/stream/ngx_stream_proxy_module.c +++ b/src/stream/ngx_stream_proxy_module.c @@ -814,6 +814,7 @@ ngx_stream_proxy_process(ngx_stream_sess 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 @@ ngx_stream_proxy_process(ngx_stream_sess 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; }