diff options
| author | Maxim Dounin <mdounin@mdounin.ru> | 2013-02-11 16:06:39 +0000 |
|---|---|---|
| committer | Maxim Dounin <mdounin@mdounin.ru> | 2013-02-11 16:06:39 +0000 |
| commit | c9e51955ead69cdd7212043610c4c85082b5a41d (patch) | |
| tree | 5c1e36491eda3663b279c321592c2ac90eb37853 | |
| parent | 431111e8d814280b2208d5910f4618b228f5af7d (diff) | |
| download | nginx-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.c | 4 |
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; |
