aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2016-05-18 15:57:30 +0300
committerMaxim Dounin <mdounin@mdounin.ru>2016-05-18 15:57:30 +0300
commitce9ff81b3295eac5389a39dc861679f71d78690c (patch)
tree81d5bec4f51c17d2212d72bf00acc826eb1432ca /src
parente7c914321b3b4fe2aac308ccd473515697a8f942 (diff)
downloadnginx-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.c23
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