xinghe0 发表于 2017-12-23 14:04:53

sxhlinux

////////////   nginx/src/event/ngx_event.c   ///////  if (ngx_use_accept_mutex) {
  if (ngx_accept_disabled > 0) {
  ngx_accept_disabled--;
  } else {
  if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) {
  return;
  }
  if (ngx_accept_mutex_held) {
  flags |= NGX_POST_EVENTS;          //增加NGX_POST_EVENTS标识
  } else {
  if (timer == NGX_TIMER_INFINITE
  || timer > ngx_accept_mutex_delay)
  {
  timer = ngx_accept_mutex_delay;
  }
  }
  }
  }
  
////////////////////////
  
ngx_int_t
  
ngx_trylock_accept_mutex(ngx_cycle_t *cycle)
  
{
  if (ngx_shmtx_trylock(&ngx_accept_mutex)) {
  ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
  "accept mutex locked");
  if (ngx_accept_mutex_held && ngx_accept_events == 0) {
  return NGX_OK;
  }
  if (ngx_enable_accept_events(cycle) == NGX_ERROR) {   //将cycle->listening加入到当前worker进程的epoll
  ngx_shmtx_unlock(&ngx_accept_mutex);
  return NGX_ERROR;
  }
  ngx_accept_events = 0;
  ngx_accept_mutex_held = 1;
  return NGX_OK;
  }
  ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
  "accept mutex lock failed: %ui", ngx_accept_mutex_held);
  if (ngx_accept_mutex_held) {
  if (ngx_disable_accept_events(cycle, 0) == NGX_ERROR) {   //将cycle->listening从当前worker进程的epoll移除
  return NGX_ERROR;
  }
  ngx_accept_mutex_held = 0;
  }
  return NGX_OK;
  
}
  
页: [1]
查看完整版本: sxhlinux