Mercurial > hg > nginx
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 |