aboutsummaryrefslogtreecommitdiff
path: root/src/event
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2005-10-12 13:50:36 +0000
committerIgor Sysoev <igor@sysoev.ru>2005-10-12 13:50:36 +0000
commit784522377ec160bc148ff3bb40fb87ede7506d5d (patch)
tree0c76a9c51a1c2ffa35ad3eb05e3b80f6cc19c60a /src/event
parentbbfe3033bc82427b15ccf73767e786cbb12a7627 (diff)
downloadnginx-release-0.3.2.tar.gz
nginx-release-0.3.2.zip
nginx-0.3.2-RELEASE importrelease-0.3.2
*) Feature: the Sun Studio 10 C compiler support. *) Feature: the "proxy_upstream_max_fails", "proxy_upstream_fail_timeout", "fastcgi_upstream_max_fails", and "fastcgi_upstream_fail_timeout" directives.
Diffstat (limited to 'src/event')
-rw-r--r--src/event/modules/ngx_kqueue_module.c2
-rw-r--r--src/event/ngx_event.c46
-rw-r--r--src/event/ngx_event_accept.c41
-rw-r--r--src/event/ngx_event_acceptex.c23
-rw-r--r--src/event/ngx_event_connect.c37
-rw-r--r--src/event/ngx_event_timer.c11
-rw-r--r--src/event/ngx_event_timer.h6
7 files changed, 42 insertions, 124 deletions
diff --git a/src/event/modules/ngx_kqueue_module.c b/src/event/modules/ngx_kqueue_module.c
index 99342ab1f..e80e1aba0 100644
--- a/src/event/modules/ngx_kqueue_module.c
+++ b/src/event/modules/ngx_kqueue_module.c
@@ -511,7 +511,7 @@ ngx_kqueue_process_events(ngx_cycle_t *cycle)
}
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
- "kevent timer: %d, changes: %d", timer, n);
+ "kevent timer: %M, changes: %d", timer, n);
events = kevent(ngx_kqueue, change_list, n, event_list, nevents, tp);
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index eaca46746..2e2a06518 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -40,7 +40,7 @@ ngx_uint_t ngx_event_flags;
ngx_event_actions_t ngx_event_actions;
-ngx_atomic_t connection_counter;
+ngx_atomic_t connection_counter = 1;
ngx_atomic_t *ngx_connection_counter = &connection_counter;
@@ -49,6 +49,7 @@ ngx_atomic_t *ngx_accept_mutex;
ngx_uint_t ngx_accept_mutex_held;
ngx_msec_t ngx_accept_mutex_delay;
ngx_int_t ngx_accept_disabled;
+ngx_file_t ngx_accept_mutex_lock_file;
#if (NGX_STAT_STUB)
@@ -349,7 +350,7 @@ ngx_event_module_init(ngx_cycle_t *cycle)
ecf = (*cf)[ngx_event_core_module.ctx_index];
- ngx_log_error(NGX_LOG_INFO, cycle->log, 0,
+ ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0,
"using the \"%s\" event method", ecf->name);
#if !(NGX_WIN32)
@@ -501,21 +502,21 @@ ngx_event_process_init(ngx_cycle_t *cycle)
#endif
- cycle->connections0 = ngx_alloc(sizeof(ngx_connection_t) * ecf->connections,
+ cycle->connections = ngx_alloc(sizeof(ngx_connection_t) * ecf->connections,
cycle->log);
- if (cycle->connections0 == NULL) {
+ if (cycle->connections == NULL) {
return NGX_ERROR;
}
- c = cycle->connections0;
+ c = cycle->connections;
- cycle->read_events0 = ngx_alloc(sizeof(ngx_event_t) * ecf->connections,
+ cycle->read_events = ngx_alloc(sizeof(ngx_event_t) * ecf->connections,
cycle->log);
- if (cycle->read_events0 == NULL) {
+ if (cycle->read_events == NULL) {
return NGX_ERROR;
}
- rev = cycle->read_events0;
+ rev = cycle->read_events;
for (i = 0; i < cycle->connection_n; i++) {
rev[i].closed = 1;
rev[i].instance = 1;
@@ -525,13 +526,13 @@ ngx_event_process_init(ngx_cycle_t *cycle)
#endif
}
- cycle->write_events0 = ngx_alloc(sizeof(ngx_event_t) * ecf->connections,
+ cycle->write_events = ngx_alloc(sizeof(ngx_event_t) * ecf->connections,
cycle->log);
- if (cycle->write_events0 == NULL) {
+ if (cycle->write_events == NULL) {
return NGX_ERROR;
}
- wev = cycle->write_events0;
+ wev = cycle->write_events;
for (i = 0; i < cycle->connection_n; i++) {
wev[i].closed = 1;
#if (NGX_THREADS)
@@ -547,8 +548,8 @@ ngx_event_process_init(ngx_cycle_t *cycle)
i--;
c[i].data = next;
- c[i].read = &cycle->read_events0[i];
- c[i].write = &cycle->write_events0[i];
+ c[i].read = &cycle->read_events[i];
+ c[i].write = &cycle->write_events[i];
c[i].fd = (ngx_socket_t) -1;
next = &c[i];
@@ -572,14 +573,6 @@ ngx_event_process_init(ngx_cycle_t *cycle)
return NGX_ERROR;
}
- rev = c->read;
- wev = c->write;
-
- ngx_memzero(c, sizeof(ngx_connection_t));
-
- c->read = rev;
- c->write = wev;
- c->fd = ls[i].fd;
c->log = &ls[i].log;
c->listening = &ls[i];
@@ -588,18 +581,9 @@ ngx_event_process_init(ngx_cycle_t *cycle)
c->ctx = ls[i].ctx;
c->servers = ls[i].servers;
- ngx_memzero(rev, sizeof(ngx_event_t));
- ngx_memzero(wev, sizeof(ngx_event_t));
-
- /* required by poll */
- wev->index = NGX_INVALID_INDEX;
+ rev = c->read;
rev->log = c->log;
- rev->data = c;
- rev->index = NGX_INVALID_INDEX;
-
- rev->available = 0;
-
rev->accept = 1;
#if (NGX_HAVE_DEFERRED_ACCEPT)
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index 4df9dc611..238a49415 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -22,7 +22,6 @@ ngx_event_accept(ngx_event_t *ev)
socklen_t sl;
ngx_err_t err;
ngx_log_t *log;
- ngx_uint_t instance;
ngx_socket_t s;
ngx_event_t *rev, *wev;
ngx_listening_t *ls;
@@ -76,8 +75,8 @@ ngx_event_accept(ngx_event_t *ev)
}
#if (NGX_STAT_STUB)
- ngx_atomic_inc(ngx_stat_accepted);
- ngx_atomic_inc(ngx_stat_active);
+ ngx_atomic_fetch_add(ngx_stat_accepted, 1);
+ ngx_atomic_fetch_add(ngx_stat_active, 1);
#endif
ngx_accept_disabled = NGX_ACCEPT_THRESHOLD
@@ -94,16 +93,6 @@ ngx_event_accept(ngx_event_t *ev)
return;
}
- rev = c->read;
- wev = c->write;
-
- ngx_memzero(c, sizeof(ngx_connection_t));
-
- c->read = rev;
- c->write = wev;
- c->fd = s;
- c->log = ev->log;
-
c->pool = ngx_create_pool(ls->pool_size, ev->log);
if (c->pool == NULL) {
ngx_close_accepted_connection(c);
@@ -164,21 +153,9 @@ ngx_event_accept(ngx_event_t *ev)
c->ctx = lc->ctx;
c->servers = lc->servers;
- instance = rev->instance;
-
- ngx_memzero(rev, sizeof(ngx_event_t));
- ngx_memzero(wev, sizeof(ngx_event_t));
-
- rev->instance = !instance;
- wev->instance = !instance;
-
- rev->index = NGX_INVALID_INDEX;
- wev->index = NGX_INVALID_INDEX;
-
- rev->data = c;
- wev->data = c;
+ rev = c->read;
+ wev = c->write;
- wev->write = 1;
wev->ready = 1;
if (ngx_event_flags & (NGX_USE_AIO_EVENT|NGX_USE_RTSIG_EVENT)) {
@@ -197,18 +174,18 @@ ngx_event_accept(ngx_event_t *ev)
wev->log = log;
/*
- * TODO: MT: - atomic increment (x86: lock xadd)
+ * TODO: MT: - ngx_atomic_fetch_add()
* or protection by critical section or light mutex
*
* TODO: MP: - allocated in a shared memory
- * - atomic increment (x86: lock xadd)
+ * - ngx_atomic_fetch_add()
* or protection by critical section or light mutex
*/
- c->number = ngx_atomic_inc(ngx_connection_counter);
+ c->number = ngx_atomic_fetch_add(ngx_connection_counter, 1);
#if (NGX_STAT_STUB)
- ngx_atomic_inc(ngx_stat_handled);
+ ngx_atomic_fetch_add(ngx_stat_handled, 1);
#endif
#if (NGX_THREADS)
@@ -391,7 +368,7 @@ ngx_close_accepted_connection(ngx_connection_t *c)
}
#if (NGX_STAT_STUB)
- ngx_atomic_dec(ngx_stat_active);
+ ngx_atomic_fetch_add(ngx_stat_active, -1);
#endif
}
diff --git a/src/event/ngx_event_acceptex.c b/src/event/ngx_event_acceptex.c
index 961971424..f26984492 100644
--- a/src/event/ngx_event_acceptex.c
+++ b/src/event/ngx_event_acceptex.c
@@ -75,7 +75,7 @@ ngx_event_acceptex(ngx_event_t *rev)
ngx_event_post_acceptex(c->listening, 1);
- c->number = ngx_atomic_inc(ngx_connection_counter);
+ c->number = ngx_atomic_fetch_add(ngx_connection_counter, 1);
c->listening->handler(c);
@@ -117,16 +117,6 @@ ngx_event_post_acceptex(ngx_listening_t *ls, ngx_uint_t n)
return NGX_ERROR;
}
- rev = c->read;
- wev = c->write;
-
- ngx_memzero(c, sizeof(ngx_connection_t));
-
- c->read = rev;
- c->write = wev;
- c->fd = s;
- c->log = &ls->log;
-
c->pool = ngx_create_pool(ls->pool_size, &ls->log);
if (c->pool == NULL) {
ngx_close_posted_connection(c);
@@ -172,21 +162,14 @@ ngx_event_post_acceptex(ngx_listening_t *ls, ngx_uint_t n)
c->listening = ls;
- ngx_memzero(rev, sizeof(ngx_event_t));
- ngx_memzero(wev, sizeof(ngx_event_t));
-
- rev->data = c;
- wev->data = c;
-
- rev->index = NGX_INVALID_INDEX;
- wev->index = NGX_INVALID_INDEX;
+ rev = c->read;
+ wev = c->write;
rev->ovlp.event = rev;
wev->ovlp.event = wev;
rev->handler = ngx_event_acceptex;
rev->ready = 1;
- wev->write = 1;
wev->ready = 1;
rev->log = c->log;
diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c
index 804226f78..6182ef08b 100644
--- a/src/event/ngx_event_connect.c
+++ b/src/event/ngx_event_connect.c
@@ -14,7 +14,7 @@ ngx_int_t
ngx_event_connect_peer(ngx_peer_connection_t *pc)
{
int rc;
- ngx_uint_t instance, level, i;
+ ngx_uint_t level, i;
u_int event;
time_t now;
ngx_err_t err;
@@ -81,7 +81,7 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc)
for ( ;; ) {
peer = &pc->peers->peer[pc->cur_peer];
- if (peer->fails <= peer->max_fails) {
+ if (peer->max_fails == 0 || peer->fails <= peer->max_fails) {
break;
}
@@ -139,16 +139,6 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc)
return NGX_ERROR;
}
- rev = c->read;
- wev = c->write;
-
- ngx_memzero(c, sizeof(ngx_connection_t));
-
- c->read = rev;
- c->write = wev;
- c->fd = s;
- c->log = pc->log;
-
if (pc->rcvbuf) {
if (setsockopt(s, SOL_SOCKET, SO_RCVBUF,
(const void *) &pc->rcvbuf, sizeof(int)) == -1) {
@@ -191,21 +181,8 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc)
c->tcp_nodelay = NGX_TCP_NODELAY_DISABLED;
}
- instance = rev->instance;
-
- ngx_memzero(rev, sizeof(ngx_event_t));
- ngx_memzero(wev, sizeof(ngx_event_t));
-
- rev->instance = !instance;
- wev->instance = !instance;
-
- rev->index = NGX_INVALID_INDEX;
- wev->index = NGX_INVALID_INDEX;
-
- rev->data = c;
- wev->data = c;
-
- wev->write = 1;
+ rev = c->read;
+ wev = c->write;
rev->log = pc->log;
wev->log = pc->log;
@@ -213,15 +190,15 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc)
pc->connection = c;
/*
- * TODO: MT: - atomic increment (x86: lock xadd)
+ * TODO: MT: - ngx_atomic_fetch_add()
* or protection by critical section or mutex
*
* TODO: MP: - allocated in a shared memory
- * - atomic increment (x86: lock xadd)
+ * - ngx_atomic_fetch_add()
* or protection by critical section or mutex
*/
- c->number = ngx_atomic_inc(ngx_connection_counter);
+ c->number = ngx_atomic_fetch_add(ngx_connection_counter, 1);
#if (NGX_THREADS)
rev->lock = pc->lock;
diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c
index 656f62b15..174cc65b8 100644
--- a/src/event/ngx_event_timer.c
+++ b/src/event/ngx_event_timer.c
@@ -45,8 +45,8 @@ ngx_event_timer_init(ngx_log_t *log)
ngx_msec_t
ngx_event_find_timer(void)
{
- ngx_rbtree_key_int_t timer;
- ngx_rbtree_node_t *node, *root, *sentinel;
+ ngx_msec_int_t timer;
+ ngx_rbtree_node_t *node, *root, *sentinel;
if (ngx_event_timer_rbtree.root == &ngx_event_timer_sentinel) {
return NGX_TIMER_INFINITE;
@@ -63,8 +63,7 @@ ngx_event_find_timer(void)
ngx_mutex_unlock(ngx_event_timer_mutex);
- timer = (ngx_rbtree_key_int_t) node->key
- - (ngx_rbtree_key_int_t) ngx_current_time;
+ timer = (ngx_msec_int_t) node->key - (ngx_msec_int_t) ngx_current_time;
return (ngx_msec_t) (timer > 0 ? timer : 0);
}
@@ -94,9 +93,7 @@ ngx_event_expire_timers(void)
/* node->key <= ngx_current_time */
- if ((ngx_rbtree_key_int_t) node->key
- - (ngx_rbtree_key_int_t) ngx_current_time
- <= 0)
+ if ((ngx_msec_int_t) node->key - (ngx_msec_int_t) ngx_current_time <= 0)
{
ev = (ngx_event_t *) ((char *) node - offsetof(ngx_event_t, timer));
diff --git a/src/event/ngx_event_timer.h b/src/event/ngx_event_timer.h
index 13b5c0a39..f98023447 100644
--- a/src/event/ngx_event_timer.h
+++ b/src/event/ngx_event_timer.h
@@ -60,8 +60,8 @@ ngx_event_del_timer(ngx_event_t *ev)
static ngx_inline void
ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer)
{
- ngx_rbtree_key_t key;
- ngx_rbtree_key_int_t diff;
+ ngx_msec_t key;
+ ngx_msec_int_t diff;
key = ngx_current_time + timer;
@@ -73,7 +73,7 @@ ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer)
* the rbtree operations for the fast connections.
*/
- diff = (ngx_rbtree_key_int_t) (key - ev->timer.key);
+ diff = (ngx_msec_int_t) (key - ev->timer.key);
if (ngx_abs(diff) < NGX_TIMER_LAZY_DELAY) {
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0,