diff options
Diffstat (limited to 'src/event')
| -rw-r--r-- | src/event/modules/ngx_kqueue_module.c | 48 | ||||
| -rw-r--r-- | src/event/modules/ngx_poll_module.c | 6 | ||||
| -rw-r--r-- | src/event/modules/ngx_select_module.c | 6 | ||||
| -rw-r--r-- | src/event/ngx_event.c | 3 | ||||
| -rw-r--r-- | src/event/ngx_event.h | 23 | ||||
| -rw-r--r-- | src/event/ngx_event_timer.c | 2 | ||||
| -rw-r--r-- | src/event/ngx_event_timer.h | 3 |
7 files changed, 45 insertions, 46 deletions
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c index 669f510c4..4a766bf6e 100644 --- a/src/event/modules/ngx_kqueue_module.c +++ b/src/event/modules/ngx_kqueue_module.c @@ -92,9 +92,6 @@ static int ngx_kqueue_init(ngx_cycle_t *cycle) kcf = ngx_event_get_conf(cycle->conf_ctx, ngx_kqueue_module); -ngx_log_debug(cycle->log, "CH: %d" _ kcf->changes); -ngx_log_debug(cycle->log, "EV: %d" _ kcf->events); - if (ngx_kqueue == -1) { ngx_kqueue = kqueue(); @@ -196,6 +193,7 @@ static int ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags) ngx_connection_t *c; ev->active = 1; + ev->disabled = 0; ev->oneshot = (flags & NGX_ONESHOT_EVENT) ? 1 : 0; if (nchanges > 0 @@ -205,16 +203,14 @@ static int ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags) { if (change_list[ev->index].flags == EV_DISABLE) { -#if (NGX_DEBUG_EVENT) - ngx_connection_t *c = (ngx_connection_t *) ev->data; - ngx_log_debug(ev->log, "kqueue event activated: %d: ft:%d" _ - c->fd _ event); -#endif + /* + * if the EV_DISABLE is still not passed to a kernel + * we will not pass it + */ - /* - * if the EV_DISABLE is still not passed to a kernel - * we will not pass it - */ + ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, + "kevent activated: %d: ft:%d", + ngx_event_ident(ev->data), event); if (ev->index < (u_int) --nchanges) { e = (ngx_event_t *) change_list[nchanges].udata; @@ -241,17 +237,16 @@ static int ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags) ngx_event_t *e; ev->active = 0; + ev->disabled = 0; if (nchanges > 0 && ev->index < (u_int) nchanges && ((uintptr_t) change_list[ev->index].udata & (uintptr_t) ~1) == (uintptr_t) ev) { -#if (NGX_DEBUG_EVENT) - ngx_connection_t *c = (ngx_connection_t *) ev->data; - ngx_log_debug(ev->log, "kqueue event deleted: %d: ft:%d" _ - c->fd _ event); -#endif + ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, + "kevent deleted: %d: ft:%d", + ngx_event_ident(ev->data), event); /* if the event is still not passed to a kernel we will not pass it */ @@ -274,6 +269,10 @@ static int ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags) return NGX_OK; } + if (flags & NGX_DISABLE_EVENT) { + ev->disabled = 1; + } + return ngx_kqueue_set_event(ev, event, flags & NGX_DISABLE_EVENT ? EV_DISABLE : EV_DELETE); } @@ -346,7 +345,7 @@ static int ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags) static int ngx_kqueue_process_events(ngx_log_t *log) { - int events, instance, i; + ngx_int_t events, instance, i; ngx_err_t err; ngx_msec_t timer; ngx_event_t *ev; @@ -391,10 +390,7 @@ static int ngx_kqueue_process_events(ngx_log_t *log) #endif ngx_elapsed_msec = tv.tv_sec * 1000 + tv.tv_usec / 1000 - ngx_start_msec; - if (ngx_cached_time != tv.tv_sec) { - ngx_cached_time = tv.tv_sec; - ngx_time_update(); - } + ngx_time_update(tv.tv_sec); if (timer) { delta = ngx_elapsed_msec - delta; @@ -407,12 +403,12 @@ static int ngx_kqueue_process_events(ngx_log_t *log) } } -#if (NGX_DEBUG_EVENT) - ngx_log_debug(log, "kevent timer: %d, delta: %d" _ timer _ (int) delta); -#endif + ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0, + "kevent timer: %d, delta: %d", timer, (int) delta); if (err) { - ngx_log_error(NGX_LOG_ALERT, log, err, "kevent() failed"); + ngx_log_error((err == NGX_EINTR) ? NGX_LOG_INFO : NGX_LOG_ALERT, + log, err, "kevent() failed"); return NGX_ERROR; } diff --git a/src/event/modules/ngx_poll_module.c b/src/event/modules/ngx_poll_module.c index 4bd4177c9..7c1c5fdf7 100644 --- a/src/event/modules/ngx_poll_module.c +++ b/src/event/modules/ngx_poll_module.c @@ -262,11 +262,7 @@ static int ngx_poll_process_events(ngx_log_t *log) ngx_log_debug(log, "poll ready %d" _ ready); ngx_gettimeofday(&tv); - - if (ngx_cached_time != tv.tv_sec) { - ngx_cached_time = tv.tv_sec; - ngx_time_update(); - } + ngx_time_update(tv.tv_sec); if ((int) timer != INFTIM) { delta = tv.tv_sec * 1000 + tv.tv_usec / 1000 - delta; diff --git a/src/event/modules/ngx_select_module.c b/src/event/modules/ngx_select_module.c index 52c30dda7..4c87f20a5 100644 --- a/src/event/modules/ngx_select_module.c +++ b/src/event/modules/ngx_select_module.c @@ -370,11 +370,7 @@ static int ngx_select_process_events(ngx_log_t *log) #else /* HAVE_SELECT_CHANGE_TIMEOUT */ ngx_gettimeofday(&tv); - - if (ngx_cached_time != tv.tv_sec) { - ngx_cached_time = tv.tv_sec; - ngx_time_update(); - } + ngx_time_update(tv.tv_sec); if (timer) { delta = tv.tv_sec * 1000 + tv.tv_usec / 1000 - delta; diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c index 0d81c125b..69ca583ff 100644 --- a/src/event/ngx_event.c +++ b/src/event/ngx_event.c @@ -222,7 +222,8 @@ static int ngx_event_init(ngx_cycle_t *cycle) */ if (ngx_del_event(&cycle->old_cycle->read_events[fd], - NGX_READ_EVENT, 0) == NGX_ERROR) { + NGX_READ_EVENT, NGX_CLOSE_EVENT) == NGX_ERROR) + { return NGX_ERROR; } diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h index 5a545504e..04da4d38e 100644 --- a/src/event/ngx_event.h +++ b/src/event/ngx_event.h @@ -20,6 +20,14 @@ typedef struct { #endif +typedef enum { + NGX_ERROR_CRIT = 0, + NGX_ERROR_ERR, + NGX_ERROR_INFO, + NGX_ERROR_IGNORE_ECONNRESET +} ngx_event_log_error_e; + + struct ngx_event_s { void *data; /* TODO rename to handler */ @@ -36,8 +44,8 @@ struct ngx_event_s { /* * The inline of "ngx_rbtree_t rbtree;". * - * It allows to pack the rbtree_color and the variuos event bit flags into - * the single "int". We also use "unsigned char" and then "usigned short" + * It allows to pack the rbtree_color and the various event bit flags into + * the single "int". We also use "unsigned char" and then "unsigned short" * because otherwise MSVC 6.0 uses an additional "int" for the bit flags. * We use "char rbtree_color" instead of "unsigned int rbtree_color:1" * because it preserves the bits order on the big endian platforms. @@ -62,14 +70,16 @@ struct ngx_event_s { */ unsigned char active:1; + unsigned char disabled:1; + /* the ready event; in aio mode 0 means that no operation can be posted */ unsigned char ready:1; /* aio operation is complete */ unsigned char complete:1; - unsigned char eof:1; - unsigned char error:1; + unsigned short eof:1; + unsigned short error:1; unsigned short timedout:1; unsigned short timer_set:1; @@ -78,7 +88,7 @@ struct ngx_event_s { unsigned short read_discarded:1; - unsigned short ignore_econnreset:1; + unsigned short log_error:2; /* ngx_event_log_error_e */ unsigned short unexpected_eof:1; unsigned short deferred_accept:1; @@ -371,6 +381,9 @@ int ngx_event_post_acceptex(ngx_listening_t *ls, int n); #endif +/* used in ngx_log_debugX() */ +#define ngx_event_ident(p) ((ngx_connection_t *) (p))->fd + #include <ngx_event_timer.h> diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c index 72f2cd2bd..96a992d7b 100644 --- a/src/event/ngx_event_timer.c +++ b/src/event/ngx_event_timer.c @@ -16,7 +16,7 @@ ngx_rbtree_t ngx_event_timer_sentinel; int ngx_event_timer_init(ngx_cycle_t *cycle) { - if (cycle->old_cycle) { + if (ngx_event_timer_rbtree) { return NGX_OK; } diff --git a/src/event/ngx_event_timer.h b/src/event/ngx_event_timer.h index 69de163ae..7b62c02a0 100644 --- a/src/event/ngx_event_timer.h +++ b/src/event/ngx_event_timer.h @@ -33,9 +33,6 @@ extern ngx_rbtree_t *ngx_event_timer_rbtree; extern ngx_rbtree_t ngx_event_timer_sentinel; -#define ngx_event_ident(p) ((ngx_connection_t *) (p))->fd - - ngx_inline static void ngx_event_del_timer(ngx_event_t *ev) { ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0, |
