Mercurial > hg > nginx
comparison src/event/modules/ngx_kqueue_module.c @ 271:e16dfb9b9afa
nginx-0.0.2-2004-02-26-20:10:01 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 26 Feb 2004 17:10:01 +0000 |
parents | 7bb9562216ce |
children | d4e65d74db9f |
comparison
equal
deleted
inserted
replaced
270:7bb9562216ce | 271:e16dfb9b9afa |
---|---|
411 "kevent() returned no events without timeout"); | 411 "kevent() returned no events without timeout"); |
412 return NGX_ERROR; | 412 return NGX_ERROR; |
413 } | 413 } |
414 } | 414 } |
415 | 415 |
416 #if (NGX_THREADS0) | |
417 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { | |
418 return NGX_ERROR; | |
419 } | |
420 #endif | |
421 | |
416 for (i = 0; i < events; i++) { | 422 for (i = 0; i < events; i++) { |
417 | 423 |
418 ngx_log_debug6(NGX_LOG_DEBUG_EVENT, log, 0, | 424 ngx_log_debug6(NGX_LOG_DEBUG_EVENT, log, 0, |
419 | 425 |
420 (event_list[i].ident > 0x8000000 | 426 (event_list[i].ident > 0x8000000 |
466 ngx_del_timer(ev); | 472 ngx_del_timer(ev); |
467 } | 473 } |
468 | 474 |
469 ev->ready = 1; | 475 ev->ready = 1; |
470 | 476 |
471 ev->event_handler(ev); | |
472 | |
473 break; | 477 break; |
474 | 478 |
475 case EVFILT_VNODE: | 479 case EVFILT_VNODE: |
476 ev->kq_vnode = 1; | 480 ev->kq_vnode = 1; |
477 | |
478 ev->event_handler(ev); | |
479 | 481 |
480 break; | 482 break; |
481 | 483 |
482 case EVFILT_AIO: | 484 case EVFILT_AIO: |
483 ev->complete = 1; | 485 ev->complete = 1; |
484 ev->ready = 1; | 486 ev->ready = 1; |
485 | 487 |
486 ev->event_handler(ev); | |
487 | |
488 break; | 488 break; |
489 | |
490 | 489 |
491 default: | 490 default: |
492 ngx_log_error(NGX_LOG_ALERT, log, 0, | 491 ngx_log_error(NGX_LOG_ALERT, log, 0, |
493 "unexpected kevent() filter %d", | 492 "unexpected kevent() filter %d", |
494 event_list[i].filter); | 493 event_list[i].filter); |
495 } | 494 continue; |
496 } | 495 } |
496 | |
497 #if (NGX_THREADS0) | |
498 | |
499 if (ngx_threaded) { | |
500 | |
501 if (ev->light) { | |
502 | |
503 /* the accept event */ | |
504 | |
505 ngx_mutex_unlock(ngx_posted_events_mutex); | |
506 | |
507 ev->event_handler(ev); | |
508 | |
509 if (ngx_mutex_lock(ngx_posted_events_mutex) == NGX_ERROR) { | |
510 return NGX_ERROR; | |
511 } | |
512 | |
513 } else { | |
514 ev->next = ngx_posted_events; | |
515 ngx_posted_events = ev; | |
516 } | |
517 | |
518 continue; | |
519 } | |
520 | |
521 #endif | |
522 | |
523 ev->event_handler(ev); | |
524 } | |
525 | |
526 #if (NGX_THREADS0) | |
527 ngx_mutex_unlock(ngx_posted_events_mutex); | |
528 #endif | |
497 | 529 |
498 if (timer && delta) { | 530 if (timer && delta) { |
499 ngx_event_expire_timers((ngx_msec_t) delta); | 531 ngx_event_expire_timers((ngx_msec_t) delta); |
500 } | 532 } |
501 | 533 |
534 #if (NGX_THREADS0) | |
535 if (!ngx_threaded) { | |
536 } | |
537 #endif | |
538 | |
539 /* TODO: non-thread mode only */ | |
540 | |
541 ev = ngx_posted_events; | |
542 ngx_posted_events = NULL; | |
543 | |
544 while (ev) { | |
545 ev->event_handler(ev); | |
546 ev = ev->next; | |
547 } | |
548 | |
502 return NGX_OK; | 549 return NGX_OK; |
503 } | 550 } |
551 | |
552 | |
553 #if (NGX_THREADS) | |
554 | |
555 static void ngx_kqueue_thread_handler(ngx_event_t *ev) | |
556 { | |
557 ngx_int_t instance; | |
558 | |
559 instance = (uintptr_t) ev & 1; | |
560 ev = (ngx_event_t *) ((uintptr_t) ev & (uintptr_t) ~1); | |
561 | |
562 if (ev->active == 0 || ev->instance != instance) { | |
563 | |
564 /* | |
565 * the stale event from a file descriptor | |
566 * that was just closed in this iteration | |
567 */ | |
568 | |
569 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ev->log, 0, | |
570 "kevent: stale event " PTR_FMT, ev); | |
571 return; | |
572 } | |
573 | |
574 ev->event_handler(ev); | |
575 } | |
576 | |
577 #endif | |
504 | 578 |
505 | 579 |
506 static void *ngx_kqueue_create_conf(ngx_cycle_t *cycle) | 580 static void *ngx_kqueue_create_conf(ngx_cycle_t *cycle) |
507 { | 581 { |
508 ngx_kqueue_conf_t *kcf; | 582 ngx_kqueue_conf_t *kcf; |