diff options
author | Maxim Dounin <mdounin@mdounin.ru> | 2016-05-18 15:57:30 +0300 |
---|---|---|
committer | Maxim Dounin <mdounin@mdounin.ru> | 2016-05-18 15:57:30 +0300 |
commit | ce9ff81b3295eac5389a39dc861679f71d78690c (patch) | |
tree | 81d5bec4f51c17d2212d72bf00acc826eb1432ca /src | |
parent | e7c914321b3b4fe2aac308ccd473515697a8f942 (diff) | |
download | nginx-ce9ff81b3295eac5389a39dc861679f71d78690c.tar.gz nginx-ce9ff81b3295eac5389a39dc861679f71d78690c.zip |
Events: close descriptors on errors in ngx_epoll_test_rdhup().
Diffstat (limited to 'src')
-rw-r--r-- | src/event/modules/ngx_epoll_module.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/event/modules/ngx_epoll_module.c b/src/event/modules/ngx_epoll_module.c index 95864164c..de5a94227 100644 --- a/src/event/modules/ngx_epoll_module.c +++ b/src/event/modules/ngx_epoll_module.c @@ -477,25 +477,26 @@ ngx_epoll_test_rdhup(ngx_cycle_t *cycle) if (epoll_ctl(ep, EPOLL_CTL_ADD, s[0], &ee) == -1) { ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, "epoll_ctl() failed"); - return; + goto failed; } if (close(s[1]) == -1) { ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, "close() failed"); - return; + s[1] = -1; + goto failed; } + s[1] = -1; + events = epoll_wait(ep, &ee, 1, 5000); if (events == -1) { ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, "epoll_wait() failed"); - return; + goto failed; } - (void) close(s[0]); - if (events) { ngx_use_epoll_rdhup = ee.events & EPOLLRDHUP; @@ -507,6 +508,18 @@ ngx_epoll_test_rdhup(ngx_cycle_t *cycle) ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "testing the EPOLLRDHUP flag: %s", ngx_use_epoll_rdhup ? "success" : "fail"); + +failed: + + if (s[1] != -1 && close(s[1]) == -1) { + ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, + "close() failed"); + } + + if (close(s[0]) == -1) { + ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, + "close() failed"); + } } #endif |