January 15th Friday 2010

Nginx (十)  事件

 

再看ngx_trylock_accept_mutex()函数。(觉得有点乱,不过没关系,已经找到线索了。)这个函数是在ngx_process_events_and_timers()函数中调用的。(前面已经详细说明过ngx_process_events_and_timers()这个函数的逻辑。)

1.  ngx_trylock_accept_mutex()函数先给ngx_accept_mutex上锁;

2.  如果失败了,检查ngx_accept_mutex_held标志(这个标志变量ngx_accept_mutex有没有取得锁,1表示取到了锁,0表示没有取得锁。)

3.  ngx_accept_mutex_held1时,调用ngx_disable_accept_events()函数。

ngx_disable_accept_events()函数与ngx_enable_accept_events()函数相似,只不过是删除事件的相反操作;接着将ngx_accept_mutex_held设为0。若ngx_accept_mutex_held0,立即返回NGX_OK

1.       如果成功上锁了之后,也是要看ngx_accept_mutex_held变量同时还要检查ngx_accept_eventsngx_event_flags,原代码如下:

if (ngx_accept_mutex_held

            && ngx_accept_events == 0

            && !(ngx_event_flags & NGX_USE_RTSIG_EVENT))

{

   return NGX_OK;

}

猜测这些代码的主要意思是已经标志取到了锁,就可以立即返回了。没有标志上锁就做后面的操作。

2.       不满足上面的情况,调用ngx_enable_accept_events()函数将cycle中监听的ngx_listening_t对象中添加监听事件。

6.  ngx_accept_events = 0;

    ngx_accept_mutex_held = 1;

    返回 NGX_OK

 

你可能感兴趣的:(nginx,events,2010)