ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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



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 *) ((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 ??

Несоответствие instance возможно, когда мы уже закрыли соединение, 
про которое нам сообщает ядро, и уже успели использовать структуру 
соединения заново для других целей.

-- 
Maxim Dounin
http://nginx.org/en/donation.html

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.