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;