summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2013-02-11 16:06:39 +0000
committerMaxim Dounin <mdounin@mdounin.ru>2013-02-11 16:06:39 +0000
commitc9e51955ead69cdd7212043610c4c85082b5a41d (patch)
tree5c1e36491eda3663b279c321592c2ac90eb37853
parent431111e8d814280b2208d5910f4618b228f5af7d (diff)
downloadnginx-c9e51955ead69cdd7212043610c4c85082b5a41d.tar.gz
nginx-c9e51955ead69cdd7212043610c4c85082b5a41d.tar.bz2
Merge of r5017: fixed null dereference with resolver and poll.
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.
-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;