summaryrefslogtreecommitdiffhomepage
path: root/src/event
diff options
context:
space:
mode:
Diffstat (limited to 'src/event')
-rw-r--r--src/event/modules/ngx_kqueue_module.c48
-rw-r--r--src/event/modules/ngx_poll_module.c6
-rw-r--r--src/event/modules/ngx_select_module.c6
-rw-r--r--src/event/ngx_event.c3
-rw-r--r--src/event/ngx_event.h23
-rw-r--r--src/event/ngx_event_timer.c2
-rw-r--r--src/event/ngx_event_timer.h3
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,