Mercurial > hg > nginx
diff src/event/modules/ngx_rtsig_module.c @ 567:1af2fcb3be8a release-0.3.5
nginx-0.3.5-RELEASE import
*) Bugfix: the segmentation fault may occurred if the IMAP/POP3 login
was changed by authorization server; the bug had appeared in 0.2.2.
*) Bugfix: the accept mutex did not work and all connections were
handled by one process; the bug had appeared in 0.3.3.
*) Bugfix: the timeout did not work if the "rtsig" method and the
"timer_resolution" directive were used.
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 21 Oct 2005 19:12:18 +0000 |
parents | 9c2f3ed7a247 |
children | 58475592100c |
line wrap: on
line diff
--- a/src/event/modules/ngx_rtsig_module.c +++ b/src/event/modules/ngx_rtsig_module.c @@ -286,7 +286,6 @@ ngx_rtsig_process_events(ngx_cycle_t *cy { int signo; ngx_int_t instance; - ngx_msec_t delta; ngx_err_t err; siginfo_t si; ngx_event_t *rev, *wev; @@ -317,41 +316,34 @@ ngx_rtsig_process_events(ngx_cycle_t *cy ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, err, "rtsig signo:%d", signo); - if (err == NGX_EAGAIN) { - - if (timer == NGX_TIMER_INFINITE) { - ngx_log_error(NGX_LOG_ALERT, cycle->log, err, - "sigtimedwait() returned EAGAIN without timeout"); - return NGX_ERROR; - } - - err = 0; + if (flags & NGX_UPDATE_TIME) { + ngx_time_update(0, 0); } - } else { - err = 0; - ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0, - "rtsig signo:%d fd:%d band:%04Xd", - signo, si.si_fd, si.si_band); - } + if (err == NGX_EAGAIN) { + + /* timeout */ - delta = ngx_current_msec; - - if (flags & NGX_UPDATE_TIME) { - ngx_time_update(0, 0); - } + if (timer != NGX_TIMER_INFINITE) { + return NGX_AGAIN; + } + + ngx_log_error(NGX_LOG_ALERT, cycle->log, err, + "sigtimedwait() returned EAGAIN without timeout"); + return NGX_ERROR; + } - if (err) { ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT, cycle->log, err, "sigtimedwait() failed"); return NGX_ERROR; } - if (timer != NGX_TIMER_INFINITE) { - delta = ngx_current_msec - delta; + ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0, + "rtsig signo:%d fd:%d band:%04Xd", + signo, si.si_fd, si.si_band); - ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0, - "rtsig timer: %M, delta: %M", timer, delta); + if (flags & NGX_UPDATE_TIME) { + ngx_time_update(0, 0); } rtscf = ngx_event_get_conf(ngx_cycle->conf_ctx, ngx_rtsig_module); @@ -400,8 +392,12 @@ ngx_rtsig_process_events(ngx_cycle_t *cy wev->handler(wev); } + return NGX_OK; + } else if (signo == SIGALRM) { + ngx_time_update(0, 0); + return NGX_OK; } else if (signo == SIGIO) { @@ -431,18 +427,12 @@ ngx_rtsig_process_events(ngx_cycle_t *cy return NGX_ERROR; - } else if (signo != -1) { - ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, - "sigtimedwait() returned unexpected signal: %d", signo); - - return NGX_ERROR; } - if (signo != -1) { - return NGX_OK; - } + ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, + "sigtimedwait() returned unexpected signal: %d", signo); - return NGX_AGAIN; + return NGX_ERROR; }