]> git.kaiwu.me - nginx.git/commitdiff
Events: close descriptors on errors in ngx_epoll_test_rdhup().
authorMaxim Dounin <mdounin@mdounin.ru>
Wed, 18 May 2016 12:57:30 +0000 (15:57 +0300)
committerMaxim Dounin <mdounin@mdounin.ru>
Wed, 18 May 2016 12:57:30 +0000 (15:57 +0300)
src/event/modules/ngx_epoll_module.c

index 95864164c08f1a5b721b26afca8b6e334274c52a..de5a94227a2c417ec3c45b4785c84d69a9d26ddb 100644 (file)
@@ -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