summaryrefslogtreecommitdiffhomepage
path: root/src/event
diff options
context:
space:
mode:
Diffstat (limited to 'src/event')
-rw-r--r--src/event/modules/ngx_devpoll_module.c4
-rw-r--r--src/event/modules/ngx_epoll_module.c4
-rw-r--r--src/event/ngx_event.c4
-rw-r--r--src/event/ngx_event_connect.c37
4 files changed, 35 insertions, 14 deletions
diff --git a/src/event/modules/ngx_devpoll_module.c b/src/event/modules/ngx_devpoll_module.c
index b149bfedd..1ea51f96b 100644
--- a/src/event/modules/ngx_devpoll_module.c
+++ b/src/event/modules/ngx_devpoll_module.c
@@ -510,8 +510,8 @@ ngx_devpoll_init_conf(ngx_cycle_t *cycle, void *conf)
{
ngx_devpoll_conf_t *dpcf = conf;
- ngx_conf_init_unsigned_value(dpcf->changes, 32);
- ngx_conf_init_unsigned_value(dpcf->events, 32);
+ ngx_conf_init_uint_value(dpcf->changes, 32);
+ ngx_conf_init_uint_value(dpcf->events, 32);
return NGX_CONF_OK;
}
diff --git a/src/event/modules/ngx_epoll_module.c b/src/event/modules/ngx_epoll_module.c
index e47666751..184346abf 100644
--- a/src/event/modules/ngx_epoll_module.c
+++ b/src/event/modules/ngx_epoll_module.c
@@ -479,11 +479,13 @@ ngx_epoll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
c->fd, revents);
}
+#if 0
if (revents & ~(EPOLLIN|EPOLLOUT|EPOLLERR|EPOLLHUP)) {
ngx_log_error(NGX_LOG_ALERT, log, 0,
"strange epoll_wait() events fd:%d ev:%04XD",
c->fd, revents);
}
+#endif
if ((revents & (EPOLLERR|EPOLLHUP))
&& (revents & (EPOLLIN|EPOLLOUT)) == 0)
@@ -564,7 +566,7 @@ ngx_epoll_init_conf(ngx_cycle_t *cycle, void *conf)
{
ngx_epoll_conf_t *epcf = conf;
- ngx_conf_init_unsigned_value(epcf->events, 512);
+ ngx_conf_init_uint_value(epcf->events, 512);
return NGX_CONF_OK;
}
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index 4fc98e937..7dc15623a 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -1205,10 +1205,10 @@ ngx_event_init_conf(ngx_cycle_t *cycle, void *conf)
return NGX_CONF_ERROR;
}
- ngx_conf_init_unsigned_value(ecf->connections, connections);
+ ngx_conf_init_uint_value(ecf->connections, connections);
cycle->connection_n = ecf->connections;
- ngx_conf_init_unsigned_value(ecf->use, module->ctx_index);
+ ngx_conf_init_uint_value(ecf->use, module->ctx_index);
event_module = module->ctx;
ngx_conf_init_ptr_value(ecf->name, event_module->name->data);
diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c
index 157c48002..2b4c08d05 100644
--- a/src/event/ngx_event_connect.c
+++ b/src/event/ngx_event_connect.c
@@ -81,8 +81,6 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc)
pc->peers->current = 0;
}
- pc->peers->weight = pc->peers->peer[pc->peers->current].weight;
-
pc->tries--;
if (pc->tries) {
@@ -92,16 +90,16 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc)
goto failed;
}
- pc->peers->weight--;
+ peer->current_weight--;
+
+ if (peer->current_weight == 0) {
+ peer->current_weight = peer->weight;
- if (pc->peers->weight == 0) {
pc->peers->current++;
if (pc->peers->current >= pc->peers->number) {
pc->peers->current = 0;
}
-
- pc->peers->weight = pc->peers->peer[pc->peers->current].weight;
}
} else {
@@ -131,6 +129,20 @@ ngx_event_connect_peer(ngx_peer_connection_t *pc)
goto failed;
}
+
+ peer->current_weight--;
+
+ if (peer->current_weight == 0) {
+ peer->current_weight = peer->weight;
+
+ if (pc->cur_peer == pc->peers->current) {
+ pc->peers->current++;
+
+ if (pc->peers->current >= pc->peers->number) {
+ pc->peers->current = 0;
+ }
+ }
+ }
}
}
@@ -358,15 +370,22 @@ failed:
void
ngx_event_connect_peer_failed(ngx_peer_connection_t *pc, ngx_uint_t down)
{
- time_t now;
+ time_t now;
+ ngx_peer_t *peer;
if (down) {
now = ngx_time();
/* ngx_lock_mutex(pc->peers->mutex); */
- pc->peers->peer[pc->cur_peer].fails++;
- pc->peers->peer[pc->cur_peer].accessed = now;
+ peer = &pc->peers->peer[pc->cur_peer];
+
+ peer->fails++;
+ peer->accessed = now;
+
+ if (peer->current_weight > 1) {
+ peer->current_weight /= 2;
+ }
/* ngx_unlock_mutex(pc->peers->mutex); */
}