Mercurial > hg > nginx
comparison src/event/modules/ngx_kqueue_module.c @ 114:ac69ab96328d
nginx-0.0.1-2003-07-07-10:11:50 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 07 Jul 2003 06:11:50 +0000 |
parents | d7f606e25b99 |
children | ef8c87afcfc5 |
comparison
equal
deleted
inserted
replaced
113:d7f606e25b99 | 114:ac69ab96328d |
---|---|
21 static int ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags); | 21 static int ngx_kqueue_add_event(ngx_event_t *ev, int event, u_int flags); |
22 static int ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags); | 22 static int ngx_kqueue_del_event(ngx_event_t *ev, int event, u_int flags); |
23 static int ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags); | 23 static int ngx_kqueue_set_event(ngx_event_t *ev, int filter, u_int flags); |
24 static int ngx_kqueue_process_events(ngx_log_t *log); | 24 static int ngx_kqueue_process_events(ngx_log_t *log); |
25 | 25 |
26 static void *ngx_kqueue_create_conf(ngx_pool_t *pool); | 26 static void *ngx_kqueue_create_conf(ngx_cycle_t *cycle); |
27 static char *ngx_kqueue_init_conf(ngx_pool_t *pool, void *conf); | 27 static char *ngx_kqueue_init_conf(ngx_cycle_t *cycle, void *conf); |
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; |
309 | 309 |
310 | 310 |
311 static int ngx_kqueue_process_events(ngx_log_t *log) | 311 static int ngx_kqueue_process_events(ngx_log_t *log) |
312 { | 312 { |
313 int events, instance, i; | 313 int events, instance, i; |
314 ngx_err_t err; | |
314 ngx_msec_t timer, delta; | 315 ngx_msec_t timer, delta; |
315 ngx_event_t *ev; | 316 ngx_event_t *ev; |
316 struct timeval tv; | 317 struct timeval tv; |
317 struct timespec ts, *tp; | 318 struct timespec ts, *tp; |
318 | 319 |
336 #endif | 337 #endif |
337 | 338 |
338 events = kevent(ngx_kqueue, change_list, nchanges, event_list, nevents, tp); | 339 events = kevent(ngx_kqueue, change_list, nchanges, event_list, nevents, tp); |
339 | 340 |
340 if (events == -1) { | 341 if (events == -1) { |
341 ngx_log_error(NGX_LOG_ALERT, log, ngx_errno, "kevent() failed"); | 342 err = ngx_errno; |
342 return NGX_ERROR; | 343 } else { |
344 err = 0; | |
343 } | 345 } |
344 | 346 |
345 nchanges = 0; | 347 nchanges = 0; |
346 | 348 |
347 if (timer) { | 349 if (timer) { |
348 gettimeofday(&tv, NULL); | 350 gettimeofday(&tv, NULL); |
349 delta = tv.tv_sec * 1000 + tv.tv_usec / 1000 - delta; | 351 delta = tv.tv_sec * 1000 + tv.tv_usec / 1000 - delta; |
352 | |
353 #if (NGX_DEBUG_EVENT) | |
354 ngx_log_debug(log, "kevent timer: %d, delta: %d" _ timer _ delta); | |
355 #endif | |
350 | 356 |
351 /* The expired timers must be handled before a processing of the events | 357 /* The expired timers must be handled before a processing of the events |
352 because the new timers can be added during a processing */ | 358 because the new timers can be added during a processing */ |
353 | 359 |
354 ngx_event_expire_timers(delta); | 360 ngx_event_expire_timers(delta); |
357 if (events == 0) { | 363 if (events == 0) { |
358 ngx_log_error(NGX_LOG_ALERT, log, 0, | 364 ngx_log_error(NGX_LOG_ALERT, log, 0, |
359 "kevent() returned no events without timeout"); | 365 "kevent() returned no events without timeout"); |
360 return NGX_ERROR; | 366 return NGX_ERROR; |
361 } | 367 } |
362 } | 368 |
363 | 369 #if (NGX_DEBUG_EVENT) |
364 #if (NGX_DEBUG_EVENT) | 370 ngx_log_debug(log, "kevent timer: %d, delta: %d" _ timer _ delta); |
365 ngx_log_debug(log, "kevent timer: %d, delta: %d" _ timer _ delta); | 371 #endif |
366 #endif | 372 } |
373 | |
374 if (err) { | |
375 ngx_log_error(NGX_LOG_ALERT, log, err, "kevent() failed"); | |
376 return NGX_ERROR; | |
377 } | |
367 | 378 |
368 for (i = 0; i < events; i++) { | 379 for (i = 0; i < events; i++) { |
369 | 380 |
370 #if (NGX_DEBUG_EVENT) | 381 #if (NGX_DEBUG_EVENT) |
371 if (event_list[i].ident > 0x8000000) { | 382 if (event_list[i].ident > 0x8000000) { |
437 | 448 |
438 return NGX_OK; | 449 return NGX_OK; |
439 } | 450 } |
440 | 451 |
441 | 452 |
442 static void *ngx_kqueue_create_conf(ngx_pool_t *pool) | 453 static void *ngx_kqueue_create_conf(ngx_cycle_t *cycle) |
443 { | 454 { |
444 ngx_kqueue_conf_t *kcf; | 455 ngx_kqueue_conf_t *kcf; |
445 | 456 |
446 ngx_test_null(kcf, ngx_palloc(pool, sizeof(ngx_kqueue_conf_t)), | 457 ngx_test_null(kcf, ngx_palloc(cycle->pool, sizeof(ngx_kqueue_conf_t)), |
447 NGX_CONF_ERROR); | 458 NGX_CONF_ERROR); |
448 | 459 |
449 kcf->changes = NGX_CONF_UNSET; | 460 kcf->changes = NGX_CONF_UNSET; |
450 kcf->events = NGX_CONF_UNSET; | 461 kcf->events = NGX_CONF_UNSET; |
451 | 462 |
452 return kcf; | 463 return kcf; |
453 } | 464 } |
454 | 465 |
455 | 466 |
456 static char *ngx_kqueue_init_conf(ngx_pool_t *pool, void *conf) | 467 static char *ngx_kqueue_init_conf(ngx_cycle_t *cycle, void *conf) |
457 { | 468 { |
458 ngx_kqueue_conf_t *kcf = conf; | 469 ngx_kqueue_conf_t *kcf = conf; |
459 | 470 |
460 ngx_conf_init_unsigned_value(kcf->changes, 512); | 471 ngx_conf_init_unsigned_value(kcf->changes, 512); |
461 ngx_conf_init_unsigned_value(kcf->events, 512); | 472 ngx_conf_init_unsigned_value(kcf->events, 512); |