Mercurial > hg > nginx
diff src/event/modules/ngx_select_module.c @ 315:39b6f2df45c0
nginx-0.0.3-2004-04-14-21:44:28 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Wed, 14 Apr 2004 17:44:28 +0000 |
parents | d71c87d11b16 |
children | a0beefedaf94 |
line wrap: on
line diff
--- a/src/event/modules/ngx_select_module.c +++ b/src/event/modules/ngx_select_module.c @@ -263,34 +263,26 @@ static int ngx_select_process_events(ngx static ngx_epoch_msec_t deltas = 0; #endif - work_read_fd_set = master_read_fd_set; - work_write_fd_set = master_write_fd_set; - timer = ngx_event_find_timer(); ngx_old_elapsed_msec = ngx_elapsed_msec; - if (timer) { - tv.tv_sec = timer / 1000; - tv.tv_usec = (timer % 1000) * 1000; - tp = &tv; - expire = 1; - - } else { - tp = NULL; - expire = 0; - } - -#if (NGX_DEBUG) - for (i = 0; i < nevents; i++) { - ev = event_index[i]; - c = ev->data; - ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, - "select event: fd:%d wr:%d", c->fd,ev->write); - } -#endif + expire = 1; #if !(WIN32) + if (ngx_accept_mutex) { + if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) { + return NGX_ERROR; + } + + if (ngx_accept_mutex_held == 0 + && (timer == 0 || timer > ngx_accept_mutex_delay)) + { + timer = ngx_accept_mutex_delay; + expire = 0; + } + } + if (max_fd == -1) { for (i = 0; i < nevents; i++) { c = event_index[i]->data; @@ -303,22 +295,41 @@ static int ngx_select_process_events(ngx "change max_fd: %d", max_fd); } - if (ngx_accept_mutex) { - if (ngx_trylock_accept_mutex(cycle) == NGX_ERROR) { - return NGX_ERROR; - } +#endif + +#if (NGX_DEBUG) + for (i = 0; i < nevents; i++) { + ev = event_index[i]; + c = ev->data; + ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, + "select event: fd:%d wr:%d", c->fd, ev->write); + } +#endif - if (ngx_accept_mutex_held == 0 && timer > ngx_accept_mutex_delay) { - timer = ngx_accept_mutex_delay; - expire = 0; - } + if (timer == -1) { + tv.tv_sec = 0; + tv.tv_usec = 0; + tp = &tv; + + } else if (timer) { + tv.tv_sec = timer / 1000; + tv.tv_usec = (timer % 1000) * 1000; + tp = &tv; + + } else { + tp = NULL; + expire = 0; } -#endif - ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "select timer: %d", timer); + work_read_fd_set = master_read_fd_set; + work_write_fd_set = master_write_fd_set; + + ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, + "select read fd_set: %08X", *(int *) &work_read_fd_set); + #if (WIN32) ready = select(0, &work_read_fd_set, &work_write_fd_set, NULL, tp); #else @@ -359,6 +370,7 @@ static int ngx_select_process_events(ngx if (ready == 0) { ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, "select() returned no events without timeout"); + ngx_accept_mutex_unlock(); return NGX_ERROR; } } @@ -381,6 +393,7 @@ static int ngx_select_process_events(ngx if (ready == 0) { ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, "select() returned no events without timeout"); + ngx_accept_mutex_unlock(); return NGX_ERROR; } } @@ -397,6 +410,7 @@ static int ngx_select_process_events(ngx ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT, cycle->log, err, "select() failed"); #endif + ngx_accept_mutex_unlock(); return NGX_ERROR; }