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

2013-09-27 Пенетрантность Валентин Бартенев
On Friday 27 September 2013 21:26:13 megalodon wrote: > Все, осознал: воркер, получив очередной event_list[] и обрабатывая > некоторое событие может закрыть также и другой дескриптор, связанный с > обрабатываемым, причем событие с этого другого закрываемого дескриптора > также могло попасть в этот

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

2013-09-27 Пенетрантность megalodon
Все, осознал: воркер, получив очередной event_list[] и обрабатывая некоторое событие может закрыть также и другой дескриптор, связанный с обрабатываемым, причем событие с этого другого закрываемого дескриптора также могло попасть в этот event_list[], и пока мы до него доберемся, структура, которая

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

2013-09-27 Пенетрантность Валентин Бартенев
On Friday 27 September 2013 20:45:27 megalodon wrote: > Пытаюсь вникнуть в мысль: "Мы могли закрыть соединение до того, как > добрались до обработки событий". Но где в промежутке между epoll_wait() и > итерацией цикла, в которой мы обрабатываем событие то место, где мы можем > потенциально закрыть

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

2013-09-27 Пенетрантность megalodon
Пытаюсь вникнуть в мысль: "Мы могли закрыть соединение до того, как добрались до обработки событий". Но где в промежутке между epoll_wait() и итерацией цикла, в которой мы обрабатываем событие то место, где мы можем потенциально закрыть сокет? events = epoll_wait(ep, event_list, (int) nevents,

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

2013-09-27 Пенетрантность Maxim Dounin
Hello! On Fri, Sep 27, 2013 at 11:32:20AM -0400, megalodon wrote: > Но после закрытия дескриптора, ядро автоматически удалит этот дескриптор из > своих структур и не будет по нему отслеживать события. > > Ход событий в общем: воркер блокируется на epoll_wait(), по истечении > тайм-аута либо по

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

2013-09-27 Пенетрантность Валентин Бартенев
On Friday 27 September 2013 19:32:20 megalodon wrote: > Но после закрытия дескриптора, ядро автоматически удалит этот дескриптор из > своих структур и не будет по нему отслеживать события. > > Ход событий в общем: воркер блокируется на epoll_wait(), по истечении > тайм-аута либо по получении neven

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

2013-09-27 Пенетрантность megalodon
Но после закрытия дескриптора, ядро автоматически удалит этот дескриптор из своих структур и не будет по нему отслеживать события. Ход событий в общем: воркер блокируется на epoll_wait(), по истечении тайм-аута либо по получении nevent событий, воркер просыпается и в цикле перебирает эти события.

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

2013-09-27 Пенетрантность Maxim Dounin
Hello! On Fri, Sep 27, 2013 at 03:32:53AM -0400, megalodon wrote: > Добрый день. > > В функции 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

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

2013-09-27 Пенетрантность megalodon
Добрый день. В функции 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