Lines Matching refs:engine

54 static nxt_int_t nxt_kqueue_create(nxt_event_engine_t *engine,
56 static void nxt_kqueue_free(nxt_event_engine_t *engine);
57 static void nxt_kqueue_enable(nxt_event_engine_t *engine, nxt_fd_event_t *ev);
58 static void nxt_kqueue_disable(nxt_event_engine_t *engine, nxt_fd_event_t *ev);
59 static void nxt_kqueue_delete(nxt_event_engine_t *engine, nxt_fd_event_t *ev);
60 static nxt_bool_t nxt_kqueue_close(nxt_event_engine_t *engine,
62 static void nxt_kqueue_enable_read(nxt_event_engine_t *engine,
64 static void nxt_kqueue_enable_write(nxt_event_engine_t *engine,
66 static void nxt_kqueue_disable_read(nxt_event_engine_t *engine,
68 static void nxt_kqueue_disable_write(nxt_event_engine_t *engine,
70 static void nxt_kqueue_block_read(nxt_event_engine_t *engine,
72 static void nxt_kqueue_block_write(nxt_event_engine_t *engine,
74 static void nxt_kqueue_oneshot_read(nxt_event_engine_t *engine,
76 static void nxt_kqueue_oneshot_write(nxt_event_engine_t *engine,
78 static void nxt_kqueue_enable_accept(nxt_event_engine_t *engine,
80 static void nxt_kqueue_enable_file(nxt_event_engine_t *engine,
82 static void nxt_kqueue_close_file(nxt_event_engine_t *engine,
84 static void nxt_kqueue_fd_set(nxt_event_engine_t *engine, nxt_fd_event_t *ev,
86 static struct kevent *nxt_kqueue_get_kevent(nxt_event_engine_t *engine);
87 static void nxt_kqueue_error(nxt_event_engine_t *engine);
92 static nxt_int_t nxt_kqueue_add_signal(nxt_event_engine_t *engine,
95 static nxt_int_t nxt_kqueue_enable_post(nxt_event_engine_t *engine,
97 static void nxt_kqueue_signal(nxt_event_engine_t *engine, nxt_uint_t signo);
99 static void nxt_kqueue_poll(nxt_event_engine_t *engine, nxt_msec_t timeout);
173 nxt_kqueue_create(nxt_event_engine_t *engine, nxt_uint_t mchanges, in nxt_kqueue_create() argument
178 engine->u.kqueue.fd = -1; in nxt_kqueue_create()
179 engine->u.kqueue.mchanges = mchanges; in nxt_kqueue_create()
180 engine->u.kqueue.mevents = mevents; in nxt_kqueue_create()
181 engine->u.kqueue.pid = nxt_pid; in nxt_kqueue_create()
183 engine->u.kqueue.changes = nxt_malloc(sizeof(struct kevent) * mchanges); in nxt_kqueue_create()
184 if (engine->u.kqueue.changes == NULL) { in nxt_kqueue_create()
188 engine->u.kqueue.events = nxt_malloc(sizeof(struct kevent) * mevents); in nxt_kqueue_create()
189 if (engine->u.kqueue.events == NULL) { in nxt_kqueue_create()
193 engine->u.kqueue.fd = kqueue(); in nxt_kqueue_create()
194 if (engine->u.kqueue.fd == -1) { in nxt_kqueue_create()
195 nxt_alert(&engine->task, "kqueue() failed %E", nxt_errno); in nxt_kqueue_create()
199 nxt_debug(&engine->task, "kqueue(): %d", engine->u.kqueue.fd); in nxt_kqueue_create()
201 if (engine->signals != NULL) { in nxt_kqueue_create()
202 for (sigev = engine->signals->sigev; sigev->signo != 0; sigev++) { in nxt_kqueue_create()
203 if (nxt_kqueue_add_signal(engine, sigev) != NXT_OK) { in nxt_kqueue_create()
213 nxt_kqueue_free(engine); in nxt_kqueue_create()
220 nxt_kqueue_free(nxt_event_engine_t *engine) in nxt_kqueue_free() argument
224 fd = engine->u.kqueue.fd; in nxt_kqueue_free()
226 nxt_debug(&engine->task, "kqueue %d free", fd); in nxt_kqueue_free()
228 if (fd != -1 && engine->u.kqueue.pid == nxt_pid) { in nxt_kqueue_free()
232 nxt_alert(&engine->task, "kqueue close(%d) failed %E", in nxt_kqueue_free()
237 nxt_free(engine->u.kqueue.events); in nxt_kqueue_free()
238 nxt_free(engine->u.kqueue.changes); in nxt_kqueue_free()
240 nxt_memzero(&engine->u.kqueue, sizeof(nxt_kqueue_engine_t)); in nxt_kqueue_free()
245 nxt_kqueue_enable(nxt_event_engine_t *engine, nxt_fd_event_t *ev) in nxt_kqueue_enable() argument
247 nxt_kqueue_enable_read(engine, ev); in nxt_kqueue_enable()
248 nxt_kqueue_enable_write(engine, ev); in nxt_kqueue_enable()
258 nxt_kqueue_disable(nxt_event_engine_t *engine, nxt_fd_event_t *ev) in nxt_kqueue_disable() argument
262 nxt_kqueue_fd_set(engine, ev, EVFILT_READ, EV_DISABLE); in nxt_kqueue_disable()
267 nxt_kqueue_fd_set(engine, ev, EVFILT_WRITE, EV_DISABLE); in nxt_kqueue_disable()
273 nxt_kqueue_delete(nxt_event_engine_t *engine, nxt_fd_event_t *ev) in nxt_kqueue_delete() argument
277 nxt_kqueue_fd_set(engine, ev, EVFILT_READ, EV_DELETE); in nxt_kqueue_delete()
282 nxt_kqueue_fd_set(engine, ev, EVFILT_WRITE, EV_DELETE); in nxt_kqueue_delete()
297 nxt_kqueue_close(nxt_event_engine_t *engine, nxt_fd_event_t *ev) in nxt_kqueue_close() argument
304 end = &engine->u.kqueue.changes[engine->u.kqueue.nchanges]; in nxt_kqueue_close()
306 for (kev = engine->u.kqueue.changes; kev < end; kev++) { in nxt_kqueue_close()
324 nxt_kqueue_enable_read(nxt_event_engine_t *engine, nxt_fd_event_t *ev) in nxt_kqueue_enable_read() argument
327 nxt_kqueue_fd_set(engine, ev, EVFILT_READ, in nxt_kqueue_enable_read()
336 nxt_kqueue_enable_write(nxt_event_engine_t *engine, nxt_fd_event_t *ev) in nxt_kqueue_enable_write() argument
339 nxt_kqueue_fd_set(engine, ev, EVFILT_WRITE, in nxt_kqueue_enable_write()
348 nxt_kqueue_disable_read(nxt_event_engine_t *engine, nxt_fd_event_t *ev) in nxt_kqueue_disable_read() argument
352 nxt_kqueue_fd_set(engine, ev, EVFILT_READ, EV_DISABLE); in nxt_kqueue_disable_read()
357 nxt_kqueue_disable_write(nxt_event_engine_t *engine, nxt_fd_event_t *ev) in nxt_kqueue_disable_write() argument
361 nxt_kqueue_fd_set(engine, ev, EVFILT_WRITE, EV_DISABLE); in nxt_kqueue_disable_write()
366 nxt_kqueue_block_read(nxt_event_engine_t *engine, nxt_fd_event_t *ev) in nxt_kqueue_block_read() argument
375 nxt_kqueue_block_write(nxt_event_engine_t *engine, nxt_fd_event_t *ev) in nxt_kqueue_block_write() argument
384 nxt_kqueue_oneshot_read(nxt_event_engine_t *engine, nxt_fd_event_t *ev) in nxt_kqueue_oneshot_read() argument
388 nxt_kqueue_fd_set(engine, ev, EVFILT_WRITE, in nxt_kqueue_oneshot_read()
394 nxt_kqueue_oneshot_write(nxt_event_engine_t *engine, nxt_fd_event_t *ev) in nxt_kqueue_oneshot_write() argument
398 nxt_kqueue_fd_set(engine, ev, EVFILT_WRITE, in nxt_kqueue_oneshot_write()
404 nxt_kqueue_enable_accept(nxt_event_engine_t *engine, nxt_fd_event_t *ev) in nxt_kqueue_enable_accept() argument
409 nxt_kqueue_fd_set(engine, ev, EVFILT_READ, EV_ADD | EV_ENABLE); in nxt_kqueue_enable_accept()
414 nxt_kqueue_enable_file(nxt_event_engine_t *engine, nxt_file_event_t *ev) in nxt_kqueue_enable_file() argument
422 nxt_debug(&engine->task, "kevent(%d) set: id:%d ft:%i fl:%04Xd, ff:%04XuD", in nxt_kqueue_enable_file()
423 engine->u.kqueue.fd, ev->file->fd, EVFILT_VNODE, flags, fflags); in nxt_kqueue_enable_file()
425 kev = nxt_kqueue_get_kevent(engine); in nxt_kqueue_enable_file()
437 nxt_kqueue_close_file(nxt_event_engine_t *engine, nxt_file_event_t *ev) in nxt_kqueue_close_file() argument
444 nxt_kqueue_fd_set(nxt_event_engine_t *engine, nxt_fd_event_t *ev, in nxt_kqueue_fd_set() argument
450 engine->u.kqueue.fd, ev->fd, filter, flags); in nxt_kqueue_fd_set()
452 kev = nxt_kqueue_get_kevent(engine); in nxt_kqueue_fd_set()
464 nxt_kqueue_get_kevent(nxt_event_engine_t *engine) in nxt_kqueue_get_kevent() argument
468 nchanges = engine->u.kqueue.nchanges; in nxt_kqueue_get_kevent()
470 if (nxt_slow_path(nchanges >= engine->u.kqueue.mchanges)) { in nxt_kqueue_get_kevent()
472 nxt_debug(&engine->task, "kevent(%d) changes:%d", in nxt_kqueue_get_kevent()
473 engine->u.kqueue.fd, nchanges); in nxt_kqueue_get_kevent()
475 ret = kevent(engine->u.kqueue.fd, engine->u.kqueue.changes, nchanges, in nxt_kqueue_get_kevent()
479 nxt_alert(&engine->task, "kevent(%d) failed %E", in nxt_kqueue_get_kevent()
480 engine->u.kqueue.fd, nxt_errno); in nxt_kqueue_get_kevent()
482 nxt_kqueue_error(engine); in nxt_kqueue_get_kevent()
485 engine->u.kqueue.nchanges = 0; in nxt_kqueue_get_kevent()
488 return &engine->u.kqueue.changes[engine->u.kqueue.nchanges++]; in nxt_kqueue_get_kevent()
493 nxt_kqueue_error(nxt_event_engine_t *engine) in nxt_kqueue_error() argument
500 wq = &engine->fast_work_queue; in nxt_kqueue_error()
501 end = &engine->u.kqueue.changes[engine->u.kqueue.nchanges]; in nxt_kqueue_error()
503 for (kev = engine->u.kqueue.changes; kev < end; kev++) { in nxt_kqueue_error()
562 nxt_kqueue_add_signal(nxt_event_engine_t *engine, const nxt_sig_event_t *sigev) in nxt_kqueue_add_signal() argument
582 nxt_alert(&engine->task, "sigaction(%d) failed %E", signo, nxt_errno); in nxt_kqueue_add_signal()
587 nxt_debug(&engine->task, "kevent(%d) signo:%d (%s)", in nxt_kqueue_add_signal()
588 engine->u.kqueue.fd, signo, sigev->name); in nxt_kqueue_add_signal()
597 if (kevent(engine->u.kqueue.fd, &kev, 1, NULL, 0, NULL) == 0) { in nxt_kqueue_add_signal()
601 nxt_alert(&engine->task, "kevent(%d) failed %E", kqueue, nxt_errno); in nxt_kqueue_add_signal()
610 nxt_kqueue_enable_post(nxt_event_engine_t *engine, nxt_work_handler_t handler) in nxt_kqueue_enable_post() argument
623 engine->u.kqueue.post_handler = handler; in nxt_kqueue_enable_post()
625 if (kevent(engine->u.kqueue.fd, &kev, 1, NULL, 0, NULL) == 0) { in nxt_kqueue_enable_post()
629 nxt_alert(&engine->task, "kevent(%d) failed %E", in nxt_kqueue_enable_post()
630 engine->u.kqueue.fd, nxt_errno); in nxt_kqueue_enable_post()
637 nxt_kqueue_signal(nxt_event_engine_t *engine, nxt_uint_t signo) in nxt_kqueue_signal() argument
653 if (kevent(engine->u.kqueue.fd, &kev, 1, NULL, 0, NULL) != 0) { in nxt_kqueue_signal()
654 nxt_alert(&engine->task, "kevent(%d) failed %E", in nxt_kqueue_signal()
655 engine->u.kqueue.fd, nxt_errno); in nxt_kqueue_signal()
663 nxt_kqueue_poll(nxt_event_engine_t *engine, nxt_msec_t timeout) in nxt_kqueue_poll() argument
689 nxt_debug(&engine->task, "kevent(%d) changes:%d timeout:%M", in nxt_kqueue_poll()
690 engine->u.kqueue.fd, engine->u.kqueue.nchanges, timeout); in nxt_kqueue_poll()
692 nevents = kevent(engine->u.kqueue.fd, in nxt_kqueue_poll()
693 engine->u.kqueue.changes, engine->u.kqueue.nchanges, in nxt_kqueue_poll()
694 engine->u.kqueue.events, engine->u.kqueue.mevents, tp); in nxt_kqueue_poll()
698 nxt_thread_time_update(engine->task.thread); in nxt_kqueue_poll()
700 nxt_debug(&engine->task, "kevent(%d): %d", engine->u.kqueue.fd, nevents); in nxt_kqueue_poll()
705 nxt_log(&engine->task, level, "kevent(%d) failed %E", in nxt_kqueue_poll()
706 engine->u.kqueue.fd, err); in nxt_kqueue_poll()
709 nxt_kqueue_error(engine); in nxt_kqueue_poll()
715 engine->u.kqueue.nchanges = 0; in nxt_kqueue_poll()
721 kev = &engine->u.kqueue.events[i]; in nxt_kqueue_poll()
723 nxt_debug(&engine->task, in nxt_kqueue_poll()
731 nxt_alert(&engine->task, in nxt_kqueue_poll()
733 engine->u.kqueue.fd, kev->data, kev->ident, kev->filter); in nxt_kqueue_poll()
737 task = &engine->task; in nxt_kqueue_poll()
738 wq = &engine->fast_work_queue; in nxt_kqueue_poll()
824 handler = engine->u.kqueue.post_handler; in nxt_kqueue_poll()
833 nxt_alert(&engine->task, in nxt_kqueue_poll()
835 engine->u.kqueue.fd, kev->filter, kev->ident); in nxt_kqueue_poll()
855 nxt_event_engine_t *engine; in nxt_kqueue_conn_io_connect() local
874 engine = task->thread->engine; in nxt_kqueue_conn_io_connect()
875 nxt_conn_timer(engine, c, state, &c->write_timer); in nxt_kqueue_conn_io_connect()
877 nxt_kqueue_enable_write(engine, &c->socket); in nxt_kqueue_conn_io_connect()
905 nxt_timer_disable(task->thread->engine, &c->write_timer); in nxt_kqueue_conn_connected()