diff options
| author | Igor Sysoev <igor@sysoev.ru> | 2004-04-09 16:03:04 +0000 |
|---|---|---|
| committer | Igor Sysoev <igor@sysoev.ru> | 2004-04-09 16:03:04 +0000 |
| commit | 407b0deeaf8455b220f0fdc5754d599dd3830a46 (patch) | |
| tree | dfcbd24e036064ead477df71c4a3ee77562178d5 /src/event | |
| parent | 3d3d2e4700e2de6d6864c2164dccff6e78c51b3d (diff) | |
| download | nginx-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.c | 18 | ||||
| -rw-r--r-- | src/event/ngx_event.c | 28 | ||||
| -rw-r--r-- | src/event/ngx_event.h | 1 | ||||
| -rw-r--r-- | src/event/ngx_event_accept.c | 2 | ||||
| -rw-r--r-- | src/event/ngx_event_connect.c | 2 |
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) { |
