Deleted
Added
nxt_kqueue_engine.c (312:c156aea91063) | nxt_kqueue_engine.c (564:762f8c976ead) |
---|---|
1 2/* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7#include <nxt_main.h> 8 --- 180 unchanged lines hidden (view full) --- 189 190 engine->u.kqueue.events = nxt_malloc(sizeof(struct kevent) * mevents); 191 if (engine->u.kqueue.events == NULL) { 192 goto fail; 193 } 194 195 engine->u.kqueue.fd = kqueue(); 196 if (engine->u.kqueue.fd == -1) { | 1 2/* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7#include <nxt_main.h> 8 --- 180 unchanged lines hidden (view full) --- 189 190 engine->u.kqueue.events = nxt_malloc(sizeof(struct kevent) * mevents); 191 if (engine->u.kqueue.events == NULL) { 192 goto fail; 193 } 194 195 engine->u.kqueue.fd = kqueue(); 196 if (engine->u.kqueue.fd == -1) { |
197 nxt_log(&engine->task, NXT_LOG_CRIT, "kqueue() failed %E", nxt_errno); | 197 nxt_alert(&engine->task, "kqueue() failed %E", nxt_errno); |
198 goto fail; 199 } 200 201 nxt_debug(&engine->task, "kqueue(): %d", engine->u.kqueue.fd); 202 203 if (engine->signals != NULL) { 204 for (sigev = engine->signals->sigev; sigev->signo != 0; sigev++) { 205 if (nxt_kqueue_add_signal(engine, sigev) != NXT_OK) { --- 20 unchanged lines hidden (view full) --- 226 fd = engine->u.kqueue.fd; 227 228 nxt_debug(&engine->task, "kqueue %d free", fd); 229 230 if (fd != -1 && engine->u.kqueue.pid == nxt_pid) { 231 /* kqueue is not inherited by fork() */ 232 233 if (close(fd) != 0) { | 198 goto fail; 199 } 200 201 nxt_debug(&engine->task, "kqueue(): %d", engine->u.kqueue.fd); 202 203 if (engine->signals != NULL) { 204 for (sigev = engine->signals->sigev; sigev->signo != 0; sigev++) { 205 if (nxt_kqueue_add_signal(engine, sigev) != NXT_OK) { --- 20 unchanged lines hidden (view full) --- 226 fd = engine->u.kqueue.fd; 227 228 nxt_debug(&engine->task, "kqueue %d free", fd); 229 230 if (fd != -1 && engine->u.kqueue.pid == nxt_pid) { 231 /* kqueue is not inherited by fork() */ 232 233 if (close(fd) != 0) { |
234 nxt_log(&engine->task, NXT_LOG_CRIT, "kqueue close(%d) failed %E", 235 fd, nxt_errno); | 234 nxt_alert(&engine->task, "kqueue close(%d) failed %E", 235 fd, nxt_errno); |
236 } 237 } 238 239 nxt_free(engine->u.kqueue.events); 240 nxt_free(engine->u.kqueue.changes); 241 242 nxt_memzero(&engine->u.kqueue, sizeof(nxt_kqueue_engine_t)); 243} --- 229 unchanged lines hidden (view full) --- 473 474 nxt_debug(&engine->task, "kevent(%d) changes:%d", 475 engine->u.kqueue.fd, nchanges); 476 477 ret = kevent(engine->u.kqueue.fd, engine->u.kqueue.changes, nchanges, 478 NULL, 0, NULL); 479 480 if (nxt_slow_path(ret != 0)) { | 236 } 237 } 238 239 nxt_free(engine->u.kqueue.events); 240 nxt_free(engine->u.kqueue.changes); 241 242 nxt_memzero(&engine->u.kqueue, sizeof(nxt_kqueue_engine_t)); 243} --- 229 unchanged lines hidden (view full) --- 473 474 nxt_debug(&engine->task, "kevent(%d) changes:%d", 475 engine->u.kqueue.fd, nchanges); 476 477 ret = kevent(engine->u.kqueue.fd, engine->u.kqueue.changes, nchanges, 478 NULL, 0, NULL); 479 480 if (nxt_slow_path(ret != 0)) { |
481 nxt_log(&engine->task, NXT_LOG_CRIT, "kevent(%d) failed %E", 482 engine->u.kqueue.fd, nxt_errno); | 481 nxt_alert(&engine->task, "kevent(%d) failed %E", 482 engine->u.kqueue.fd, nxt_errno); |
483 484 nxt_kqueue_error(engine); 485 } 486 487 engine->u.kqueue.nchanges = 0; 488 } 489 490 return &engine->u.kqueue.changes[engine->u.kqueue.nchanges++]; --- 85 unchanged lines hidden (view full) --- 576 * SIGCHLD must not be set to SIG_IGN, since kqueue cannot catch 577 * this signal. It should be set to SIG_DFL instead. And although 578 * SIGCHLD default action is also ignoring, nevertheless SIG_DFL 579 * allows kqueue to catch the signal. 580 */ 581 sa.sa_handler = (signo == SIGCHLD) ? SIG_DFL : SIG_IGN; 582 583 if (sigaction(signo, &sa, NULL) != 0) { | 483 484 nxt_kqueue_error(engine); 485 } 486 487 engine->u.kqueue.nchanges = 0; 488 } 489 490 return &engine->u.kqueue.changes[engine->u.kqueue.nchanges++]; --- 85 unchanged lines hidden (view full) --- 576 * SIGCHLD must not be set to SIG_IGN, since kqueue cannot catch 577 * this signal. It should be set to SIG_DFL instead. And although 578 * SIGCHLD default action is also ignoring, nevertheless SIG_DFL 579 * allows kqueue to catch the signal. 580 */ 581 sa.sa_handler = (signo == SIGCHLD) ? SIG_DFL : SIG_IGN; 582 583 if (sigaction(signo, &sa, NULL) != 0) { |
584 nxt_log(&engine->task, NXT_LOG_CRIT, "sigaction(%d) failed %E", 585 signo, nxt_errno); | 584 nxt_alert(&engine->task, "sigaction(%d) failed %E", signo, nxt_errno); |
586 587 return NXT_ERROR; 588 } 589 590 nxt_debug(&engine->task, "kevent(%d) signo:%d (%s)", 591 engine->u.kqueue.fd, signo, sigev->name); 592 593 kev.ident = signo; 594 kev.filter = EVFILT_SIGNAL; 595 kev.flags = EV_ADD; 596 kev.fflags = 0; 597 kev.data = 0; 598 kev.udata = nxt_kevent_set_udata(sigev); 599 600 if (kevent(engine->u.kqueue.fd, &kev, 1, NULL, 0, NULL) == 0) { 601 return NXT_OK; 602 } 603 | 585 586 return NXT_ERROR; 587 } 588 589 nxt_debug(&engine->task, "kevent(%d) signo:%d (%s)", 590 engine->u.kqueue.fd, signo, sigev->name); 591 592 kev.ident = signo; 593 kev.filter = EVFILT_SIGNAL; 594 kev.flags = EV_ADD; 595 kev.fflags = 0; 596 kev.data = 0; 597 kev.udata = nxt_kevent_set_udata(sigev); 598 599 if (kevent(engine->u.kqueue.fd, &kev, 1, NULL, 0, NULL) == 0) { 600 return NXT_OK; 601 } 602 |
604 nxt_log(&engine->task, NXT_LOG_CRIT, "kevent(%d) failed %E", 605 kqueue, nxt_errno); | 603 nxt_alert(&engine->task, "kevent(%d) failed %E", kqueue, nxt_errno); |
606 607 return NXT_ERROR; 608} 609 610 611#if (NXT_HAVE_EVFILT_USER) 612 613static nxt_int_t --- 11 unchanged lines hidden (view full) --- 625 kev.udata = NULL; 626 627 engine->u.kqueue.post_handler = handler; 628 629 if (kevent(engine->u.kqueue.fd, &kev, 1, NULL, 0, NULL) == 0) { 630 return NXT_OK; 631 } 632 | 604 605 return NXT_ERROR; 606} 607 608 609#if (NXT_HAVE_EVFILT_USER) 610 611static nxt_int_t --- 11 unchanged lines hidden (view full) --- 623 kev.udata = NULL; 624 625 engine->u.kqueue.post_handler = handler; 626 627 if (kevent(engine->u.kqueue.fd, &kev, 1, NULL, 0, NULL) == 0) { 628 return NXT_OK; 629 } 630 |
633 nxt_log(&engine->task, NXT_LOG_CRIT, "kevent(%d) failed %E", 634 engine->u.kqueue.fd, nxt_errno); | 631 nxt_alert(&engine->task, "kevent(%d) failed %E", 632 engine->u.kqueue.fd, nxt_errno); |
635 636 return NXT_ERROR; 637} 638 639 640static void 641nxt_kqueue_signal(nxt_event_engine_t *engine, nxt_uint_t signo) 642{ --- 7 unchanged lines hidden (view full) --- 650 kev.ident = 0; 651 kev.filter = EVFILT_USER; 652 kev.flags = 0; 653 kev.fflags = NOTE_TRIGGER; 654 kev.data = 0; 655 kev.udata = NULL; 656 657 if (kevent(engine->u.kqueue.fd, &kev, 1, NULL, 0, NULL) != 0) { | 633 634 return NXT_ERROR; 635} 636 637 638static void 639nxt_kqueue_signal(nxt_event_engine_t *engine, nxt_uint_t signo) 640{ --- 7 unchanged lines hidden (view full) --- 648 kev.ident = 0; 649 kev.filter = EVFILT_USER; 650 kev.flags = 0; 651 kev.fflags = NOTE_TRIGGER; 652 kev.data = 0; 653 kev.udata = NULL; 654 655 if (kevent(engine->u.kqueue.fd, &kev, 1, NULL, 0, NULL) != 0) { |
658 nxt_log(&engine->task, NXT_LOG_CRIT, "kevent(%d) failed %E", 659 engine->u.kqueue.fd, nxt_errno); | 656 nxt_alert(&engine->task, "kevent(%d) failed %E", 657 engine->u.kqueue.fd, nxt_errno); |
660 } 661} 662 663#endif 664 665 666static void 667nxt_kqueue_poll(nxt_event_engine_t *engine, nxt_msec_t timeout) --- 31 unchanged lines hidden (view full) --- 699 700 err = (nevents == -1) ? nxt_errno : 0; 701 702 nxt_thread_time_update(engine->task.thread); 703 704 nxt_debug(&engine->task, "kevent(%d): %d", engine->u.kqueue.fd, nevents); 705 706 if (nevents == -1) { | 658 } 659} 660 661#endif 662 663 664static void 665nxt_kqueue_poll(nxt_event_engine_t *engine, nxt_msec_t timeout) --- 31 unchanged lines hidden (view full) --- 697 698 err = (nevents == -1) ? nxt_errno : 0; 699 700 nxt_thread_time_update(engine->task.thread); 701 702 nxt_debug(&engine->task, "kevent(%d): %d", engine->u.kqueue.fd, nevents); 703 704 if (nevents == -1) { |
707 level = (err == NXT_EINTR) ? NXT_LOG_INFO : NXT_LOG_CRIT; | 705 level = (err == NXT_EINTR) ? NXT_LOG_INFO : NXT_LOG_ALERT; |
708 709 nxt_log(&engine->task, level, "kevent(%d) failed %E", 710 engine->u.kqueue.fd, err); 711 712 nxt_kqueue_error(engine); 713 return; 714 } 715 --- 8 unchanged lines hidden (view full) --- 724 "kevent: id:%p ft:%d fl:%04Xd ff:%d d:%d ud:%p": 725 "kevent: id:%d ft:%d fl:%04Xd ff:%d d:%d ud:%p", 726 kev->ident, kev->filter, kev->flags, kev->fflags, 727 kev->data, kev->udata); 728 729 error = (kev->flags & EV_ERROR); 730 731 if (nxt_slow_path(error)) { | 706 707 nxt_log(&engine->task, level, "kevent(%d) failed %E", 708 engine->u.kqueue.fd, err); 709 710 nxt_kqueue_error(engine); 711 return; 712 } 713 --- 8 unchanged lines hidden (view full) --- 722 "kevent: id:%p ft:%d fl:%04Xd ff:%d d:%d ud:%p": 723 "kevent: id:%d ft:%d fl:%04Xd ff:%d d:%d ud:%p", 724 kev->ident, kev->filter, kev->flags, kev->fflags, 725 kev->data, kev->udata); 726 727 error = (kev->flags & EV_ERROR); 728 729 if (nxt_slow_path(error)) { |
732 nxt_log(&engine->task, NXT_LOG_CRIT, 733 "kevent(%d) error %E on ident:%d filter:%d", 734 engine->u.kqueue.fd, kev->data, kev->ident, kev->filter); | 730 nxt_alert(&engine->task, 731 "kevent(%d) error %E on ident:%d filter:%d", 732 engine->u.kqueue.fd, kev->data, kev->ident, kev->filter); |
735 } 736 737 task = &engine->task; 738 wq = &engine->fast_work_queue; 739 handler = nxt_kqueue_fd_error_handler; 740 obj = nxt_kevent_get_udata(kev->udata); 741 742 switch (kev->filter) { --- 82 unchanged lines hidden (view full) --- 825 data = NULL; 826 break; 827 828#endif 829 830 default: 831 832#if (NXT_DEBUG) | 733 } 734 735 task = &engine->task; 736 wq = &engine->fast_work_queue; 737 handler = nxt_kqueue_fd_error_handler; 738 obj = nxt_kevent_get_udata(kev->udata); 739 740 switch (kev->filter) { --- 82 unchanged lines hidden (view full) --- 823 data = NULL; 824 break; 825 826#endif 827 828 default: 829 830#if (NXT_DEBUG) |
833 nxt_log(&engine->task, NXT_LOG_CRIT, 834 "unexpected kevent(%d) filter %d on ident %d", 835 engine->u.kqueue.fd, kev->filter, kev->ident); | 831 nxt_alert(&engine->task, 832 "unexpected kevent(%d) filter %d on ident %d", 833 engine->u.kqueue.fd, kev->filter, kev->ident); |
836#endif 837 838 continue; 839 } 840 841 nxt_work_queue_add(wq, handler, task, obj, data); 842 } 843} --- 185 unchanged lines hidden --- | 834#endif 835 836 continue; 837 } 838 839 nxt_work_queue_add(wq, handler, task, obj, data); 840 } 841} --- 185 unchanged lines hidden --- |