Question about stale event in nginx

如&am果 1193610322 at qq.com
Sun Mar 19 10:59:15 UTC 2017


hello!
These days, I am studying the nginx source code.. 
I think this code is very beautiful.
But there is a question.
If there is some coming event : #1, #2,#3 .. #40, ,
When we deal with #1, #40 will shut down and it's variables instance is 0
and #2.#3 is a new connection,
Accept function to allocate a new descriptor which is just free (#40),
when we deal with #2, 
we need to invoke function named ngx_event_accept, and then invoke ngx_get_connection,
but unfortunately after that ,we failed which mean we need to free connection,but we have invoked ngx_get_connection once which means variables instance have changed once.
when we deal with #3,we success, the fd set to 40, and the value of instance is changed again. 
Now it's the same with before, so the  following Judgment statement in the function named ngx_epoll_process_events will not  work,
if (c->fd == -1 || rev->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;
}
I know  it can post event not handle,but if i don't use ngx_use_accept_mutex,which means the flag in function ngx_process_events_and_timers doesn't include NGX_POST_EVENTS,
in this case,it will not post event but handle event  immediately and it's wrong because #40 is stale event.


I'm looking forward to your early reply.
Thank you!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20170319/239f6533/attachment.html>


More information about the nginx-devel mailing list