From 8e35463045550d0592dc5b17c3f20bfbfb20a89f Mon Sep 17 00:00:00 2001 From: "agentzh (Yichun Zhang)" Date: Wed, 23 Jan 2013 15:17:04 -0800 Subject: [PATCH] updated resolver_wev_handler_segfault_with_poll.patch to Ruslan Ermilov's version. --- ...olver_wev_handler_segfault_with_poll.patch | 50 ++++++++++--------- ...olver_wev_handler_segfault_with_poll.patch | 50 ++++++++++--------- 2 files changed, 52 insertions(+), 48 deletions(-) diff --git a/patches/nginx-1.2.6-resolver_wev_handler_segfault_with_poll.patch b/patches/nginx-1.2.6-resolver_wev_handler_segfault_with_poll.patch index 3c70da2..e7293f0 100644 --- a/patches/nginx-1.2.6-resolver_wev_handler_segfault_with_poll.patch +++ b/patches/nginx-1.2.6-resolver_wev_handler_segfault_with_poll.patch @@ -1,29 +1,31 @@ ---- nginx-1.2.6/src/core/ngx_resolver.c 2012-11-12 10:47:07.000000000 -0800 -+++ nginx-1.2.6-patched/src/core/ngx_resolver.c 2013-01-22 14:52:42.716434183 -0800 -@@ -91,6 +91,7 @@ static void *ngx_resolver_dup(ngx_resolv - static in_addr_t *ngx_resolver_rotate(ngx_resolver_t *r, in_addr_t *src, - ngx_uint_t n); - static u_char *ngx_resolver_log_error(ngx_log_t *log, u_char *buf, size_t len); -+static void ngx_resolver_empty_handler(ngx_event_t *ev); +--- nginx-1.2.6/src/event/modules/ngx_poll_module.c 2012-01-18 07:07:43.000000000 -0800 ++++ nginx-1.2.6-patched/src/event/modules/ngx_poll_module.c 2013-01-23 12:34:13.990781456 -0800 +@@ -367,11 +367,18 @@ ngx_poll_process_events(ngx_cycle_t *cyc + */ + revents |= POLLIN|POLLOUT; ++ if (c->read->active) { ++ revents |= POLLIN; ++ } ++ ++ if (c->write->active) { ++ revents |= POLLOUT; ++ } + } - ngx_resolver_t * -@@ -2258,6 +2259,8 @@ ngx_udp_connect(ngx_udp_connection_t *uc - rev->log = &uc->log; - wev->log = &uc->log; + found = 0; -+ wev->handler = ngx_resolver_empty_handler; -+ - uc->connection = c; +- if (revents & POLLIN) { ++ if ((revents & POLLIN) && c->read->active) { + found = 1; - c->number = ngx_atomic_fetch_add(ngx_connection_counter, 1); -@@ -2311,3 +2314,9 @@ ngx_udp_connect(ngx_udp_connection_t *uc + ev = c->read; +@@ -388,7 +395,7 @@ ngx_poll_process_events(ngx_cycle_t *cyc + ngx_locked_post_event(ev, queue); + } + +- if (revents & POLLOUT) { ++ if ((revents & POLLOUT) && c->write->active) { + found = 1; + ev = c->write; - return NGX_OK; - } -+ -+ -+static void -+ngx_resolver_empty_handler(ngx_event_t *ev) -+{ -+} diff --git a/patches/nginx-1.3.7-resolver_wev_handler_segfault_with_poll.patch b/patches/nginx-1.3.7-resolver_wev_handler_segfault_with_poll.patch index 1909e87..f229122 100644 --- a/patches/nginx-1.3.7-resolver_wev_handler_segfault_with_poll.patch +++ b/patches/nginx-1.3.7-resolver_wev_handler_segfault_with_poll.patch @@ -1,29 +1,31 @@ ---- nginx-1.3.7/src/core/ngx_resolver.c 2012-11-12 10:47:07.000000000 -0800 -+++ nginx-1.3.7-patched/src/core/ngx_resolver.c 2013-01-22 14:52:42.716434183 -0800 -@@ -91,6 +91,7 @@ static void *ngx_resolver_dup(ngx_resolv - static in_addr_t *ngx_resolver_rotate(ngx_resolver_t *r, in_addr_t *src, - ngx_uint_t n); - static u_char *ngx_resolver_log_error(ngx_log_t *log, u_char *buf, size_t len); -+static void ngx_resolver_empty_handler(ngx_event_t *ev); +--- nginx-1.3.7/src/event/modules/ngx_poll_module.c 2012-01-18 07:07:43.000000000 -0800 ++++ nginx-1.3.7-patched/src/event/modules/ngx_poll_module.c 2013-01-23 12:34:13.990781456 -0800 +@@ -367,11 +367,18 @@ ngx_poll_process_events(ngx_cycle_t *cyc + */ + revents |= POLLIN|POLLOUT; ++ if (c->read->active) { ++ revents |= POLLIN; ++ } ++ ++ if (c->write->active) { ++ revents |= POLLOUT; ++ } + } - ngx_resolver_t * -@@ -2258,6 +2259,8 @@ ngx_udp_connect(ngx_udp_connection_t *uc - rev->log = &uc->log; - wev->log = &uc->log; + found = 0; -+ wev->handler = ngx_resolver_empty_handler; -+ - uc->connection = c; +- if (revents & POLLIN) { ++ if ((revents & POLLIN) && c->read->active) { + found = 1; - c->number = ngx_atomic_fetch_add(ngx_connection_counter, 1); -@@ -2311,3 +2314,9 @@ ngx_udp_connect(ngx_udp_connection_t *uc + ev = c->read; +@@ -388,7 +395,7 @@ ngx_poll_process_events(ngx_cycle_t *cyc + ngx_locked_post_event(ev, queue); + } + +- if (revents & POLLOUT) { ++ if ((revents & POLLOUT) && c->write->active) { + found = 1; + ev = c->write; - return NGX_OK; - } -+ -+ -+static void -+ngx_resolver_empty_handler(ngx_event_t *ev) -+{ -+}