[nginx] Fixed work with --test-build-epoll after f7849bfb6d21.
Maxim Dounin
mdounin at mdounin.ru
Wed May 18 12:58:10 UTC 2016
details: http://hg.nginx.org/nginx/rev/a01e400dd4a1
branches:
changeset: 6540:a01e400dd4a1
user: Maxim Dounin <mdounin at mdounin.ru>
date: Wed May 18 15:57:28 2016 +0300
description:
Fixed work with --test-build-epoll after f7849bfb6d21.
diffstat:
src/event/modules/ngx_epoll_module.c | 138 ++++++++++++++++++----------------
1 files changed, 71 insertions(+), 67 deletions(-)
diffs (184 lines):
diff --git a/src/event/modules/ngx_epoll_module.c b/src/event/modules/ngx_epoll_module.c
--- 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_cycl
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_event
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_m
#endif
#if (NGX_HAVE_FILE_AIO)
+ ngx_epoll_aio_init(cycle, epcf);
+#endif
- ngx_epoll_aio_init(cycle, epcf);
-
+#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 *e
#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)
{
More information about the nginx-devel
mailing list