Когда может возникнуть ситуация, что rev->instance != instance?
megalodon
nginx-forum at nginx.us
Fri Sep 27 07:32:53 UTC 2013
Добрый день.
В функции ngx_epoll_process_events() есть такой участок кода:
for (i = 0; i < events; i++) {
c = event_list[i].data.ptr;
instance = (uintptr_t) c & 1;
c = (ngx_connection_t *) ((uintptr_t) c & (uintptr_t) ~1);
rev = c->read;
if (c->fd == -1 || rev->instance != instance) {
.....
}
.....
}
Условие rev->instance != instance будет проверяться, если c->fd != -1, т.е.
в случае когда дескриптор не был закрыт.
c->fd устанавливается в -1 в функциях: ngx_close_connection() и
ngx_close_accepted_connection().
Но rev->instance инвертируется в функции ngx_get_connection(), которая
вызывается в ngx_event_accept().
Получается, что несоответсвие instance возможно, когда мы не закрыли
соединение и при этом акцептировали новое и для него была выделена уже
существующая структура ngx_connection_t ??
Posted at Nginx Forum: http://forum.nginx.org/read.php?21,243182,243182#msg-243182
Подробная информация о списке рассылки nginx-ru