Mercurial > hg > nginx
changeset 4305:f68047884e83
Protection from stale write events in epoll.
Stale write event may happen if epoll_wait() reported both read and write
events, and processing of the read event closed descriptor.
Patch by Yichun Zhang (agentzh).
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Tue, 22 Nov 2011 17:02:21 +0000 |
parents | ed922fb9d6c1 |
children | 05f3174483de |
files | src/event/modules/ngx_epoll_module.c |
diffstat | 1 files changed, 12 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/event/modules/ngx_epoll_module.c Tue Nov 22 16:27:45 2011 +0000 +++ b/src/event/modules/ngx_epoll_module.c Tue Nov 22 17:02:21 2011 +0000 @@ -681,6 +681,18 @@ wev = c->write; + if (c->fd == -1 || wev->instance != instance) { + + /* + * the stale event from a file descriptor + * that was just closed in this iteration + */ + + ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, + "epoll: stale event %p", c); + continue; + } + if ((revents & EPOLLOUT) && wev->active) { if (flags & NGX_POST_THREAD_EVENTS) {