aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2016-05-18 15:57:28 +0300
committerMaxim Dounin <mdounin@mdounin.ru>2016-05-18 15:57:28 +0300
commitb115a46ee6bc07cfde549e618040bfa9e84a8842 (patch)
tree1287f4708cabdeac7d203f41b81b45ff3b9f1e2f /src
parentbf838dc9dfca4e80b883c2e659c65f90fc1526a3 (diff)
downloadnginx-b115a46ee6bc07cfde549e618040bfa9e84a8842.tar.gz
nginx-b115a46ee6bc07cfde549e618040bfa9e84a8842.zip
Fixed work with --test-build-epoll after f7849bfb6d21.
Diffstat (limited to 'src')
-rw-r--r--src/event/modules/ngx_epoll_module.c136
1 files changed, 70 insertions, 66 deletions
diff --git a/src/event/modules/ngx_epoll_module.c b/src/event/modules/ngx_epoll_module.c
index b1e520b2d..f7f2c9004 100644
--- a/src/event/modules/ngx_epoll_module.c
+++ b/src/event/modules/ngx_epoll_module.c
@@ -105,6 +105,9 @@ static ngx_int_t ngx_epoll_init(ngx_cycle_t *cycle, ngx_msec_t timer);
static ngx_int_t ngx_epoll_notify_init(ngx_log_t *log);
static void ngx_epoll_notify_handler(ngx_event_t *ev);
#endif
+#if (NGX_HAVE_EPOLLRDHUP)
+static void ngx_epoll_test_rdhup(ngx_cycle_t *cycle);
+#endif
static void ngx_epoll_done(ngx_cycle_t *cycle);
static ngx_int_t ngx_epoll_add_event(ngx_event_t *ev, ngx_int_t event,
ngx_uint_t flags);
@@ -123,7 +126,6 @@ static ngx_int_t ngx_epoll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
static void ngx_epoll_eventfd_handler(ngx_event_t *ev);
#endif
-static ngx_int_t ngx_epoll_module_init(ngx_cycle_t *cycle);
static void *ngx_epoll_create_conf(ngx_cycle_t *cycle);
static char *ngx_epoll_init_conf(ngx_cycle_t *cycle, void *conf);
@@ -202,7 +204,7 @@ ngx_module_t ngx_epoll_module = {
ngx_epoll_commands, /* module directives */
NGX_EVENT_MODULE, /* module type */
NULL, /* init master */
- ngx_epoll_module_init, /* init module */
+ NULL, /* init module */
NULL, /* init process */
NULL, /* init thread */
NULL, /* exit thread */
@@ -339,9 +341,11 @@ ngx_epoll_init(ngx_cycle_t *cycle, ngx_msec_t timer)
#endif
#if (NGX_HAVE_FILE_AIO)
-
ngx_epoll_aio_init(cycle, epcf);
+#endif
+#if (NGX_HAVE_EPOLLRDHUP)
+ ngx_epoll_test_rdhup(cycle);
#endif
}
@@ -454,6 +458,69 @@ ngx_epoll_notify_handler(ngx_event_t *ev)
#endif
+#if (NGX_HAVE_EPOLLRDHUP)
+
+static void
+ngx_epoll_test_rdhup(ngx_cycle_t *cycle)
+{
+ int epfd, s[2], events;
+ struct epoll_event ee;
+
+ epfd = epoll_create(1);
+
+ if (epfd == -1) {
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
+ "epoll_create() failed");
+ return;
+ }
+
+ if (socketpair(AF_UNIX, SOCK_STREAM, 0, s) == -1) {
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
+ "socketpair() failed");
+ return;
+ }
+
+ ee.events = EPOLLET|EPOLLIN|EPOLLRDHUP;
+
+ if (epoll_ctl(epfd, EPOLL_CTL_ADD, s[0], &ee) == -1) {
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
+ "epoll_ctl() failed");
+ return;
+ }
+
+ if (close(s[1]) == -1) {
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
+ "close() failed");
+ return;
+ }
+
+ events = epoll_wait(epfd, &ee, 1, 5000);
+
+ if (events == -1) {
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
+ "epoll_wait() failed");
+ return;
+ }
+
+ (void) close(s[0]);
+ (void) close(epfd);
+
+ if (events) {
+ ngx_use_epoll_rdhup = ee.events & EPOLLRDHUP;
+
+ } else {
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, NGX_ETIMEDOUT,
+ "epoll_wait() timed out");
+ }
+
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "testing the EPOLLRDHUP flag: %s",
+ ngx_use_epoll_rdhup ? "success" : "fail");
+}
+
+#endif
+
+
static void
ngx_epoll_done(ngx_cycle_t *cycle)
{
@@ -950,69 +1017,6 @@ ngx_epoll_eventfd_handler(ngx_event_t *ev)
#endif
-static ngx_int_t
-ngx_epoll_module_init(ngx_cycle_t *cycle)
-{
-#if (NGX_HAVE_EPOLLRDHUP)
- int epfd, s[2], events;
- struct epoll_event ee;
-
- epfd = epoll_create(1);
-
- if (epfd == -1) {
- ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
- "epoll_create() failed");
- return NGX_ERROR;
- }
-
- if (socketpair(AF_UNIX, SOCK_STREAM, 0, s) == -1) {
- ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
- "socketpair() failed");
- return NGX_ERROR;
- }
-
- ee.events = EPOLLET|EPOLLIN|EPOLLRDHUP;
-
- if (epoll_ctl(epfd, EPOLL_CTL_ADD, s[0], &ee) == -1) {
- ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
- "epoll_ctl() failed");
- return NGX_ERROR;
- }
-
- if (close(s[1]) == -1) {
- ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
- "close() failed");
- return NGX_ERROR;
- }
-
- events = epoll_wait(epfd, &ee, 1, 5000);
-
- if (events == -1) {
- ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
- "epoll_wait() failed");
- return NGX_ERROR;
- }
-
- (void) close(s[0]);
- (void) close(epfd);
-
- if (events) {
- ngx_use_epoll_rdhup = ee.events & EPOLLRDHUP;
-
- } else {
- ngx_log_error(NGX_LOG_ALERT, cycle->log, NGX_ETIMEDOUT,
- "epoll_wait() timed out");
- }
-
- ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0,
- "testing the EPOLLRDHUP flag: %s",
- ngx_use_epoll_rdhup ? "success" : "fail");
-#endif
-
- return NGX_OK;
-}
-
-
static void *
ngx_epoll_create_conf(ngx_cycle_t *cycle)
{