comparison 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
comparison
equal deleted inserted replaced
308:7a0dbd779c6d 309:2e899477243a
44 44
45 static ngx_uint_t ngx_event_max_module; 45 static ngx_uint_t ngx_event_max_module;
46 46
47 ngx_uint_t ngx_event_flags; 47 ngx_uint_t ngx_event_flags;
48 ngx_event_actions_t ngx_event_actions; 48 ngx_event_actions_t ngx_event_actions;
49
50
51 ngx_atomic_t connection_counter;
52 ngx_atomic_t *ngx_connection_counter = &connection_counter;
49 53
50 54
51 ngx_atomic_t *ngx_accept_mutex_ptr; 55 ngx_atomic_t *ngx_accept_mutex_ptr;
52 ngx_atomic_t *ngx_accept_mutex; 56 ngx_atomic_t *ngx_accept_mutex;
53 ngx_uint_t ngx_accept_mutex_held; 57 ngx_uint_t ngx_accept_mutex_held;
150 154
151 155
152 static ngx_int_t ngx_event_module_init(ngx_cycle_t *cycle) 156 static ngx_int_t ngx_event_module_init(ngx_cycle_t *cycle)
153 { 157 {
154 #if !(WIN32) 158 #if !(WIN32)
159
160 size_t size;
161 char *shared;
155 ngx_core_conf_t *ccf; 162 ngx_core_conf_t *ccf;
156 ngx_event_conf_t *ecf; 163 ngx_event_conf_t *ecf;
157 164
158 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module); 165 ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
159 166
161 return NGX_OK; 168 return NGX_OK;
162 } 169 }
163 170
164 ecf = ngx_event_get_conf(cycle->conf_ctx, ngx_event_core_module); 171 ecf = ngx_event_get_conf(cycle->conf_ctx, ngx_event_core_module);
165 172
166 if (ecf->accept_mutex == 0) { 173
167 return NGX_OK; 174 /* TODO: 128 is cache line size */
168 } 175
169 176 size = 128 /* ngx_accept_mutex */
170 ngx_accept_mutex_ptr = (ngx_atomic_t *) mmap(NULL, sizeof(ngx_atomic_t), 177 + 128; /* ngx_connection_counter */
171 PROT_READ|PROT_WRITE, 178
172 MAP_ANON|MAP_SHARED, -1, 0); 179 shared = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, -1, 0);
173 180
174 if (ngx_accept_mutex_ptr == NULL) { 181 if (shared == NULL) {
175 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno, 182 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
176 "mmap(MAP_ANON|MAP_SHARED) failed"); 183 "mmap(MAP_ANON|MAP_SHARED) failed");
177 return NGX_ERROR; 184 return NGX_ERROR;
178 } 185 }
186
187 if (ecf->accept_mutex) {
188 ngx_accept_mutex_ptr = (ngx_atomic_t *) shared;
189 }
190
191 ngx_connection_counter = (ngx_atomic_t *) (shared + 128);
192
179 #endif 193 #endif
180 194
181 return NGX_OK; 195 return NGX_OK;
182 } 196 }
183 197