aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRuslan Ermilov <ru@nginx.com>2013-01-25 09:59:28 +0000
committerRuslan Ermilov <ru@nginx.com>2013-01-25 09:59:28 +0000
commit33e934ccc8fcf4f62fbbd08c1eb1b396cac5facb (patch)
tree4c4547d35ef877886e624c27b70f69a319f97bf4 /src
parentdb5e48d9b8c49088f278d8a2e6e3e1cf82d441f2 (diff)
downloadnginx-33e934ccc8fcf4f62fbbd08c1eb1b396cac5facb.tar.gz
nginx-33e934ccc8fcf4f62fbbd08c1eb1b396cac5facb.zip
Events: fixed null pointer dereference with resolver and poll.
A POLLERR signalled by poll() without POLLIN/POLLOUT, as seen on Linux, would generate both read and write events, but there's no write event handler for resolver events. A fix is to only call event handler of an active event.
Diffstat (limited to 'src')
-rw-r--r--src/event/modules/ngx_poll_module.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/event/modules/ngx_poll_module.c b/src/event/modules/ngx_poll_module.c
index ed64bc51a..4d4521845 100644
--- a/src/event/modules/ngx_poll_module.c
+++ b/src/event/modules/ngx_poll_module.c
@@ -371,7 +371,7 @@ ngx_poll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
found = 0;
- if (revents & POLLIN) {
+ if ((revents & POLLIN) && c->read->active) {
found = 1;
ev = c->read;
@@ -388,7 +388,7 @@ ngx_poll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
ngx_locked_post_event(ev, queue);
}
- if (revents & POLLOUT) {
+ if ((revents & POLLOUT) && c->write->active) {
found = 1;
ev = c->write;