Welcome! Log In Create A New Profile

Advanced

Re: Когда может возникнуть ситуация, что rev->instance != instance?

September 27, 2013 12:45PM
Пытаюсь вникнуть в мысль: "Мы могли закрыть соединение до того, как добрались до обработки событий". Но где в промежутке между epoll_wait() и итерацией цикла, в которой мы обрабатываем событие то место, где мы можем потенциально закрыть сокет?

events = epoll_wait(ep, event_list, (int) nevents, timer);

err = (events == -1) ? ngx_errno : 0;

if (flags & NGX_UPDATE_TIME || ngx_event_timer_alarm) {
ngx_time_update();
}

if (err) {
.....
}

if (events == 0) {
.....
}

ngx_mutex_lock(ngx_posted_events_mutex);

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) {

Если c->fd не равно -1 и если rev->instance не совпадает с instance, то получается, что где-то между строками
events = epoll_wait(ep, event_list, (int) nevents, timer); и
.....
if (c->fd == -1 || rev->instance != instance) {
произошло инвертирование этого поля?


"Несоответствие instance возможно, когда мы уже закрыли соединение, про которое нам сообщает ядро." Получается, что пока процесс спал, будучи заблокированным на шаге epoll_wait(), каким-то образом сокет закрылся и структура ngx_connection_t была использована повторно, но как, ведь процесс был заблокирован?
Subject Author Posted

Когда может возникнуть ситуация, что rev->instance != instance?

megalodon September 27, 2013 03:32AM

Re: Когда может возникнуть ситуация, что rev->instance != instance?

Валентин Бартенев September 27, 2013 06:50AM

Re: Когда может возникнуть ситуация, что rev->instance != instance?

Maxim Dounin September 27, 2013 07:28AM

Re: Когда может возникнуть ситуация, что rev->instance != instance?

megalodon September 27, 2013 11:32AM

Re: Когда может возникнуть ситуация, что rev->instance != instance?

Maxim Dounin September 27, 2013 11:52AM

Re: Когда может возникнуть ситуация, что rev->instance != instance?

Валентин Бартенев September 27, 2013 11:54AM

Re: Когда может возникнуть ситуация, что rev->instance != instance?

megalodon September 27, 2013 12:45PM

Re: Когда может возникнуть ситуация, что rev->instance != instance?

Валентин Бартенев September 27, 2013 01:08PM

Re: Когда может возникнуть ситуация, что rev->instance != instance?

megalodon September 27, 2013 01:26PM

Re: Когда может возникнуть ситуация, что rev->instance != instance?

Валентин Бартенев September 27, 2013 01:30PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 100
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready