comparison src/event/modules/ngx_kqueue_module.c @ 194:2357fa41738a

nginx-0.0.1-2003-11-21-09:30:49 import
author Igor Sysoev <igor@sysoev.ru>
date Fri, 21 Nov 2003 06:30:49 +0000
parents c966c09be66b
children 8dee38ea9117
comparison
equal deleted inserted replaced
193:dd66383796a5 194:2357fa41738a
9 #include <ngx_event.h> 9 #include <ngx_event.h>
10 #include <ngx_kqueue_module.h> 10 #include <ngx_kqueue_module.h>
11 11
12 12
13 typedef struct { 13 typedef struct {
14 u_int changes; 14 int changes;
15 u_int events; 15 int events;
16 } ngx_kqueue_conf_t; 16 } ngx_kqueue_conf_t;
17 17
18 18
19 static int ngx_kqueue_init(ngx_cycle_t *cycle); 19 static int ngx_kqueue_init(ngx_cycle_t *cycle);
20 static void ngx_kqueue_done(ngx_cycle_t *cycle); 20 static void ngx_kqueue_done(ngx_cycle_t *cycle);
28 28
29 29
30 int ngx_kqueue = -1; 30 int ngx_kqueue = -1;
31 31
32 static struct kevent *change_list, *event_list; 32 static struct kevent *change_list, *event_list;
33 static u_int max_changes, nchanges, nevents; 33 static int max_changes, nchanges, nevents;
34 34
35 35
36 static ngx_str_t kqueue_name = ngx_string("kqueue"); 36 static ngx_str_t kqueue_name = ngx_string("kqueue");
37 37
38 static ngx_command_t ngx_kqueue_commands[] = { 38 static ngx_command_t ngx_kqueue_commands[] = {
194 194
195 ev->active = 1; 195 ev->active = 1;
196 ev->oneshot = (flags & NGX_ONESHOT_EVENT) ? 1 : 0; 196 ev->oneshot = (flags & NGX_ONESHOT_EVENT) ? 1 : 0;
197 197
198 if (nchanges > 0 198 if (nchanges > 0
199 && ev->index < nchanges 199 && ev->index < (u_int) nchanges
200 && (void *) ((uintptr_t) change_list[ev->index].udata & ~1) == ev) 200 && ((uintptr_t) change_list[ev->index].udata & (uintptr_t) ~1)
201 == (uintptr_t) ev)
201 { 202 {
202 c = ev->data; 203 c = ev->data;
203 ngx_log_error(NGX_LOG_ALERT, ev->log, 0, 204 ngx_log_error(NGX_LOG_ALERT, ev->log, 0,
204 "previous event on #%d were not passed in kernel", c->fd); 205 "previous event on #%d were not passed in kernel", c->fd);
205 206
206 return NGX_ERROR; 207 return NGX_ERROR;
207 } 208 }
208 209
209 return ngx_kqueue_set_event(ev, event, EV_ADD | flags); 210 return ngx_kqueue_set_event(ev, event, EV_ADD|flags);
210 } 211 }
211 212
212 213
213 static int ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags) 214 static int ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags)
214 { 215 {
215 ngx_event_t *e; 216 ngx_event_t *e;
216 217
217 ev->active = 0; 218 ev->active = 0;
218 219
219 if (nchanges > 0 220 if (nchanges > 0
220 && ev->index < nchanges 221 && ev->index < (u_int) nchanges
221 && (void *) ((uintptr_t) change_list[ev->index].udata & ~1) == ev) 222 && ((uintptr_t) change_list[ev->index].udata & (uintptr_t) ~1)
223 == (uintptr_t) ev)
222 { 224 {
223 #if (NGX_DEBUG_EVENT) 225 #if (NGX_DEBUG_EVENT)
224 ngx_connection_t *c = (ngx_connection_t *) ev->data; 226 ngx_connection_t *c = (ngx_connection_t *) ev->data;
225 ngx_log_debug(ev->log, "kqueue event deleted: %d: ft:%d" _ 227 ngx_log_debug(ev->log, "kqueue event deleted: %d: ft:%d" _
226 c->fd _ event); 228 c->fd _ event);
227 #endif 229 #endif
228 230
229 /* if the event is still not passed to a kernel we will not pass it */ 231 /* if the event is still not passed to a kernel we will not pass it */
230 232
231 if (ev->index < --nchanges) { 233 if (ev->index < (u_int) --nchanges) {
232 e = (ngx_event_t *) change_list[nchanges].udata; 234 e = (ngx_event_t *) change_list[nchanges].udata;
233 change_list[ev->index] = change_list[nchanges]; 235 change_list[ev->index] = change_list[nchanges];
234 e->index = ev->index; 236 e->index = ev->index;
235 } 237 }
236 238
245 247
246 if (flags & NGX_CLOSE_EVENT) { 248 if (flags & NGX_CLOSE_EVENT) {
247 return NGX_OK; 249 return NGX_OK;
248 } 250 }
249 251
250 return ngx_kqueue_set_event(ev, event, EV_DELETE); 252 return ngx_kqueue_set_event(ev, event,
253 flags & NGX_DISABLE_EVENT ? EV_DISABLE : EV_DELETE);
251 } 254 }
252 255
253 256
254 static int ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags) 257 static int ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags)
255 { 258 {
418 421
419 case EVFILT_READ: 422 case EVFILT_READ:
420 case EVFILT_WRITE: 423 case EVFILT_WRITE:
421 424
422 instance = (uintptr_t) ev & 1; 425 instance = (uintptr_t) ev & 1;
423 ev = (void *) ((uintptr_t) ev & ~1); 426 ev = (ngx_event_t *) ((uintptr_t) ev & (uintptr_t) ~1);
424 427
425 /* 428 /*
426 * it's a stale event from a file descriptor 429 * it's a stale event from a file descriptor
427 * that was just closed in this iteration 430 * that was just closed in this iteration
428 */ 431 */
484 487
485 static char *ngx_kqueue_init_conf(ngx_cycle_t *cycle, void *conf) 488 static char *ngx_kqueue_init_conf(ngx_cycle_t *cycle, void *conf)
486 { 489 {
487 ngx_kqueue_conf_t *kcf = conf; 490 ngx_kqueue_conf_t *kcf = conf;
488 491
489 ngx_conf_init_unsigned_value(kcf->changes, 512); 492 ngx_conf_init_value(kcf->changes, 512);
490 ngx_conf_init_unsigned_value(kcf->events, 512); 493 ngx_conf_init_value(kcf->events, 512);
491 494
492 return NGX_CONF_OK; 495 return NGX_CONF_OK;
493 } 496 }