summaryrefslogtreecommitdiffhomepage
path: root/src/event
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2004-04-09 16:03:04 +0000
committerIgor Sysoev <igor@sysoev.ru>2004-04-09 16:03:04 +0000
commit407b0deeaf8455b220f0fdc5754d599dd3830a46 (patch)
treedfcbd24e036064ead477df71c4a3ee77562178d5 /src/event
parent3d3d2e4700e2de6d6864c2164dccff6e78c51b3d (diff)
downloadnginx-407b0deeaf8455b220f0fdc5754d599dd3830a46.tar.gz
nginx-407b0deeaf8455b220f0fdc5754d599dd3830a46.tar.bz2
nginx-0.0.3-2004-04-09-20:03:04 import
Diffstat (limited to 'src/event')
-rw-r--r--src/event/modules/ngx_epoll_module.c18
-rw-r--r--src/event/ngx_event.c28
-rw-r--r--src/event/ngx_event.h1
-rw-r--r--src/event/ngx_event_accept.c2
-rw-r--r--src/event/ngx_event_connect.c2
5 files changed, 36 insertions, 15 deletions
diff --git a/src/event/modules/ngx_epoll_module.c b/src/event/modules/ngx_epoll_module.c
index fb41fd417..1d387799a 100644
--- a/src/event/modules/ngx_epoll_module.c
+++ b/src/event/modules/ngx_epoll_module.c
@@ -341,11 +341,12 @@ static int ngx_epoll_del_connection(ngx_connection_t *c)
int ngx_epoll_process_events(ngx_cycle_t *cycle)
{
int events;
+ size_t n;
ngx_int_t instance, i;
ngx_uint_t lock, expire;
- size_t n;
- ngx_msec_t timer;
ngx_err_t err;
+ ngx_log_t *log;
+ ngx_msec_t timer;
struct timeval tv;
ngx_connection_t *c;
ngx_epoch_msec_t delta;
@@ -416,6 +417,7 @@ int ngx_epoll_process_events(ngx_cycle_t *cycle)
}
lock = 1;
+ log = cycle->log;
for (i = 0; i < events; i++) {
c = event_list[i].data.ptr;
@@ -431,7 +433,11 @@ int ngx_epoll_process_events(ngx_cycle_t *cycle)
c->write->returned_instance = instance;
}
- ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+#if (NGX_DEBUG)
+ log = c->log ? c->log : cycle->log;
+#endif
+
+ ngx_log_debug3(NGX_LOG_DEBUG_EVENT, log, 0,
"epoll: fd:%d ev:%04X d:" PTR_FMT,
c->fd, event_list[i].events, event_list[i].data);
@@ -442,19 +448,19 @@ int ngx_epoll_process_events(ngx_cycle_t *cycle)
* that was just closed in this iteration
*/
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, log, 0,
"epoll: stale event " PTR_FMT, c);
continue;
}
if (event_list[i].events & (EPOLLERR|EPOLLHUP)) {
- ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ ngx_log_debug2(NGX_LOG_DEBUG_EVENT, log, 0,
"epoll_wait() error on fd:%d ev:%04X",
c->fd, event_list[i].events);
}
if (event_list[i].events & ~(EPOLLIN|EPOLLOUT|EPOLLERR|EPOLLHUP)) {
- ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
+ ngx_log_error(NGX_LOG_ALERT, log, 0,
"strange epoll_wait() events fd:%d ev:%04X",
c->fd, event_list[i].events);
}
diff --git a/src/event/ngx_event.c b/src/event/ngx_event.c
index c5ea45d2c..70a533f3b 100644
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -48,6 +48,10 @@ ngx_uint_t ngx_event_flags;
ngx_event_actions_t ngx_event_actions;
+ngx_atomic_t connection_counter;
+ngx_atomic_t *ngx_connection_counter = &connection_counter;
+
+
ngx_atomic_t *ngx_accept_mutex_ptr;
ngx_atomic_t *ngx_accept_mutex;
ngx_uint_t ngx_accept_mutex_held;
@@ -152,6 +156,9 @@ ngx_module_t ngx_event_core_module = {
static ngx_int_t ngx_event_module_init(ngx_cycle_t *cycle)
{
#if !(WIN32)
+
+ size_t size;
+ char *shared;
ngx_core_conf_t *ccf;
ngx_event_conf_t *ecf;
@@ -163,19 +170,26 @@ static ngx_int_t ngx_event_module_init(ngx_cycle_t *cycle)
ecf = ngx_event_get_conf(cycle->conf_ctx, ngx_event_core_module);
- if (ecf->accept_mutex == 0) {
- return NGX_OK;
- }
- ngx_accept_mutex_ptr = (ngx_atomic_t *) mmap(NULL, sizeof(ngx_atomic_t),
- PROT_READ|PROT_WRITE,
- MAP_ANON|MAP_SHARED, -1, 0);
+ /* TODO: 128 is cache line size */
+
+ size = 128 /* ngx_accept_mutex */
+ + 128; /* ngx_connection_counter */
- if (ngx_accept_mutex_ptr == NULL) {
+ shared = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, -1, 0);
+
+ if (shared == NULL) {
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
"mmap(MAP_ANON|MAP_SHARED) failed");
return NGX_ERROR;
}
+
+ if (ecf->accept_mutex) {
+ ngx_accept_mutex_ptr = (ngx_atomic_t *) shared;
+ }
+
+ ngx_connection_counter = (ngx_atomic_t *) (shared + 128);
+
#endif
return NGX_OK;
diff --git a/src/event/ngx_event.h b/src/event/ngx_event.h
index 433d6cffc..4c1403fa3 100644
--- a/src/event/ngx_event.h
+++ b/src/event/ngx_event.h
@@ -407,6 +407,7 @@ typedef struct {
} ngx_event_module_t;
+extern ngx_atomic_t *ngx_connection_counter;
extern ngx_atomic_t *ngx_accept_mutex_ptr;
extern ngx_atomic_t *ngx_accept_mutex;
diff --git a/src/event/ngx_event_accept.c b/src/event/ngx_event_accept.c
index 70db78d71..235ff7fc7 100644
--- a/src/event/ngx_event_accept.c
+++ b/src/event/ngx_event_accept.c
@@ -270,7 +270,7 @@ void ngx_event_accept(ngx_event_t *ev)
* or protection by critical section or light mutex
*/
- c->number = ngx_atomic_inc(&ngx_connection_counter);
+ c->number = ngx_atomic_inc(ngx_connection_counter);
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
"accept: fd:%d c:%d", s, c->number);
diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c
index 24fa834ec..857b3f695 100644
--- a/src/event/ngx_event_connect.c
+++ b/src/event/ngx_event_connect.c
@@ -202,7 +202,7 @@ int ngx_event_connect_peer(ngx_peer_connection_t *pc)
* or protection by critical section or mutex
*/
- c->number = ngx_atomic_inc(&ngx_connection_counter);
+ c->number = ngx_atomic_inc(ngx_connection_counter);
if (ngx_add_conn) {
if (ngx_add_conn(c) == NGX_ERROR) {