diff src/event/ngx_event.c @ 309:2e899477243a

nginx-0.0.3-2004-04-09-20:03:04 import
author Igor Sysoev <igor@sysoev.ru>
date Fri, 09 Apr 2004 16:03:04 +0000
parents ce375c313e96
children 11ff50a35d6d
line wrap: on
line diff
--- a/src/event/ngx_event.c
+++ b/src/event/ngx_event.c
@@ -48,6 +48,10 @@ ngx_uint_t                        ngx_ev
 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(n
 
     ecf = ngx_event_get_conf(cycle->conf_ctx, ngx_event_core_module);
 
-    if (ecf->accept_mutex == 0) {
-        return NGX_OK;
-    }
+
+    /* TODO: 128 is cache line size */
 
-    ngx_accept_mutex_ptr = (ngx_atomic_t *) mmap(NULL, sizeof(ngx_atomic_t),
-                                                 PROT_READ|PROT_WRITE,
-                                                 MAP_ANON|MAP_SHARED, -1, 0);
+    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;