Mercurial > hg > nginx
diff src/event/modules/ngx_devpoll_module.c @ 245:e6c005b66b3a
nginx-0.0.1-2004-01-30-00:45:01 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 29 Jan 2004 21:45:01 +0000 |
parents | bf2faf694c19 |
children | 6753e8cdaa2c |
line wrap: on
line diff
--- a/src/event/modules/ngx_devpoll_module.c +++ b/src/event/modules/ngx_devpoll_module.c @@ -106,9 +106,6 @@ static int ngx_devpoll_init(ngx_cycle_t dpcf = ngx_event_get_conf(cycle->conf_ctx, ngx_devpoll_module); -ngx_log_debug(cycle->log, "CH: %d" _ dpcf->changes); -ngx_log_debug(cycle->log, "EV: %d" _ dpcf->events); - if (dp == -1) { dp = open("/dev/poll", O_RDWR); @@ -122,7 +119,7 @@ ngx_log_debug(cycle->log, "EV: %d" _ dpc if (max_changes < dpcf->changes) { if (nchanges) { n = nchanges * sizeof(struct pollfd); - if ((size_t) write(dp, change_list, n) != n) { + if (write(dp, change_list, n) != (ssize_t) n) { ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, "write(/dev/poll) failed"); return NGX_ERROR; @@ -199,8 +196,8 @@ static void ngx_devpoll_done(ngx_cycle_t static int ngx_devpoll_add_event(ngx_event_t *ev, int event, u_int flags) { -#if (NGX_DEBUG_EVENT) - ngx_connection_t *c = (ngx_connection_t *) ev->data; +#if (NGX_DEBUG) + ngx_connection_t *c; #endif #if (NGX_READ_EVENT != POLLIN) @@ -213,9 +210,10 @@ static int ngx_devpoll_add_event(ngx_eve } #endif -#if (NGX_DEBUG_EVENT) - c = (ngx_connection_t *) ev->data; - ngx_log_debug(ev->log, "add event: %d:%d" _ c->fd _ event); +#if (NGX_DEBUG) + c = ev->data; + ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, + "devpoll add event: fd:%d ev:%04X", c->fd, event); #endif ev->active = 1; @@ -230,9 +228,8 @@ static int ngx_devpoll_del_event(ngx_eve c = ev->data; -#if (NGX_DEBUG_EVENT) - ngx_log_debug(c->log, "del event: %d, %d" _ c->fd _ event); -#endif + ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, + "devpoll del event: fd:%d ev:%04X", c->fd, event); if (ngx_devpoll_set_event(ev, POLLREMOVE, flags) == NGX_ERROR) { return NGX_ERROR; @@ -270,17 +267,15 @@ static int ngx_devpoll_set_event(ngx_eve c = ev->data; -#if (NGX_DEBUG_EVENT) - ngx_log_debug(ev->log, "devpoll fd:%d event:%d flush:%d" _ - c->fd _ event _ flags); -#endif + ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0, + "devpoll fd:%d ev:%d fl:%d", c->fd, event, flags); if (nchanges >= max_changes) { ngx_log_error(NGX_LOG_WARN, ev->log, 0, "/dev/pool change list is filled up"); n = nchanges * sizeof(struct pollfd); - if ((size_t) write(dp, change_list, n) != n) { + if (write(dp, change_list, n) != (ssize_t) n) { ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno, "write(/dev/poll) failed"); return NGX_ERROR; @@ -300,7 +295,7 @@ static int ngx_devpoll_set_event(ngx_eve if (flags & NGX_CLOSE_EVENT) { n = nchanges * sizeof(struct pollfd); - if ((size_t) write(dp, change_list, n) != n) { + if (write(dp, change_list, n) != (ssize_t) n) { ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno, "write(/dev/poll) failed"); return NGX_ERROR; @@ -320,29 +315,23 @@ int ngx_devpoll_process_events(ngx_log_t ngx_msec_t timer; ngx_err_t err; ngx_cycle_t **cycle; - ngx_epoch_msec_t delta; ngx_connection_t *c; + ngx_epoch_msec_t delta; struct dvpoll dvp; struct timeval tv; timer = ngx_event_find_timer(); + ngx_old_elapsed_msec = ngx_elapsed_msec; - if (timer) { - ngx_gettimeofday(&tv); - delta = tv.tv_sec * 1000 + tv.tv_usec / 1000; - - } else { + if (timer == 0) { timer = (ngx_msec_t) INFTIM; - delta = 0; } -#if (NGX_DEBUG_EVENT) - ngx_log_debug(log, "devpoll timer: %d" _ timer); -#endif + ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0, "devpoll timer: %d", timer); if (nchanges) { n = nchanges * sizeof(struct pollfd); - if ((size_t) write(dp, change_list, n) != n) { + if (write(dp, change_list, n) != (ssize_t) n) { ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "write(/dev/poll) failed"); return NGX_ERROR; @@ -363,34 +352,27 @@ int ngx_devpoll_process_events(ngx_log_t nchanges = 0; ngx_gettimeofday(&tv); + ngx_time_update(tv.tv_sec); - if (ngx_cached_time != tv.tv_sec) { - ngx_cached_time = tv.tv_sec; - ngx_time_update(); - } + delta = ngx_elapsed_msec; + ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec; if ((int) timer != INFTIM) { - delta = tv.tv_sec * 1000 + tv.tv_usec / 1000 - delta; + delta = ngx_elapsed_msec - delta; -#if (NGX_DEBUG_EVENT) - ngx_log_debug(log, "devpoll timer: %d, delta: %d" _ timer _ (int)delta); -#endif - ngx_event_expire_timers((ngx_msec_t) delta); - + ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0, + "devpoll timer: %d, delta: %d", timer, (int) delta); } else { if (events == 0) { ngx_log_error(NGX_LOG_ALERT, log, 0, "ioctl(DP_POLL) returned no events without timeout"); return NGX_ERROR; } - -#if (NGX_DEBUG_EVENT) - ngx_log_debug(log, "devpoll timer: %d, delta: %d" _ timer _ (int)delta); -#endif } if (err) { - ngx_log_error(NGX_LOG_ALERT, log, err, "ioctl(DP_POLL) failed"); + ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT, + log, err, "ioctl(DP_POLL) failed"); return NGX_ERROR; } @@ -411,15 +393,14 @@ int ngx_devpoll_process_events(ngx_log_t } if (c->fd == -1) { - ngx_log_error(NGX_LOG_ALERT, log, 0, "unkonwn cycle"); + ngx_log_error(NGX_LOG_EMERG, log, 0, "unknown cycle"); exit(1); } -#if (NGX_DEBUG_EVENT) - ngx_log_debug(log, "devpoll: %d: ev:%d rev:%d" _ - event_list[i].fd _ - event_list[i].events _ event_list[i].revents); -#endif + ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0, + "devpoll: fd:%d, ev:%04X, rev:%04X", + event_list[i].fd, + event_list[i].events, event_list[i].revents); if (event_list[i].revents & POLLIN) { if (!c->read->active) { @@ -451,6 +432,10 @@ int ngx_devpoll_process_events(ngx_log_t } } + if (timer != (ngx_msec_t) INFTIM && delta) { + ngx_event_expire_timers((ngx_msec_t) delta); + } + return NGX_OK; }