10Sigor@sysoev.ru 20Sigor@sysoev.ru /* 30Sigor@sysoev.ru * Copyright (C) Igor Sysoev 40Sigor@sysoev.ru * Copyright (C) NGINX, Inc. 50Sigor@sysoev.ru */ 60Sigor@sysoev.ru 70Sigor@sysoev.ru #ifndef _NXT_EVENT_ENGINE_H_INCLUDED_ 80Sigor@sysoev.ru #define _NXT_EVENT_ENGINE_H_INCLUDED_ 90Sigor@sysoev.ru 100Sigor@sysoev.ru 110Sigor@sysoev.ru #define NXT_ENGINE_FIBERS 1 120Sigor@sysoev.ru 130Sigor@sysoev.ru 140Sigor@sysoev.ru typedef struct { 150Sigor@sysoev.ru nxt_fd_t fds[2]; 160Sigor@sysoev.ru nxt_event_fd_t event; 170Sigor@sysoev.ru } nxt_event_engine_pipe_t; 180Sigor@sysoev.ru 190Sigor@sysoev.ru 200Sigor@sysoev.ru struct nxt_event_engine_s { 210Sigor@sysoev.ru const nxt_event_set_ops_t *event; 220Sigor@sysoev.ru nxt_event_set_t *event_set; 230Sigor@sysoev.ru 240Sigor@sysoev.ru nxt_event_timers_t timers; 250Sigor@sysoev.ru 261Sigor@sysoev.ru nxt_task_t task; 270Sigor@sysoev.ru /* The engine ID, the main engine has ID 0. */ 280Sigor@sysoev.ru uint32_t id; 290Sigor@sysoev.ru 300Sigor@sysoev.ru /* 310Sigor@sysoev.ru * A pipe to pass event signals to the engine, if the engine's 320Sigor@sysoev.ru * underlying event facility does not support user events. 330Sigor@sysoev.ru */ 340Sigor@sysoev.ru nxt_event_engine_pipe_t *pipe; 350Sigor@sysoev.ru 36*4Sigor@sysoev.ru nxt_work_queue_cache_t work_queue_cache; 37*4Sigor@sysoev.ru nxt_work_queue_t *current_work_queue; 38*4Sigor@sysoev.ru nxt_work_queue_t fast_work_queue; 390Sigor@sysoev.ru nxt_work_queue_t accept_work_queue; 400Sigor@sysoev.ru nxt_work_queue_t read_work_queue; 410Sigor@sysoev.ru nxt_work_queue_t socket_work_queue; 420Sigor@sysoev.ru nxt_work_queue_t connect_work_queue; 430Sigor@sysoev.ru nxt_work_queue_t write_work_queue; 440Sigor@sysoev.ru nxt_work_queue_t shutdown_work_queue; 450Sigor@sysoev.ru nxt_work_queue_t close_work_queue; 46*4Sigor@sysoev.ru nxt_work_queue_t final_work_queue; 470Sigor@sysoev.ru 48*4Sigor@sysoev.ru nxt_locked_work_queue_t locked_work_queue; 490Sigor@sysoev.ru 500Sigor@sysoev.ru nxt_event_signals_t *signals; 510Sigor@sysoev.ru 521Sigor@sysoev.ru nxt_thread_t *thread; 530Sigor@sysoev.ru nxt_fiber_main_t *fibers; 540Sigor@sysoev.ru 550Sigor@sysoev.ru uint8_t shutdown; /* 1 bit */ 560Sigor@sysoev.ru 570Sigor@sysoev.ru uint32_t batch; 580Sigor@sysoev.ru uint32_t connections; 590Sigor@sysoev.ru uint32_t max_connections; 600Sigor@sysoev.ru 610Sigor@sysoev.ru nxt_queue_t listen_connections; 620Sigor@sysoev.ru nxt_queue_t idle_connections; 630Sigor@sysoev.ru }; 640Sigor@sysoev.ru 650Sigor@sysoev.ru 660Sigor@sysoev.ru NXT_EXPORT nxt_event_engine_t *nxt_event_engine_create(nxt_thread_t *thr, 670Sigor@sysoev.ru const nxt_event_set_ops_t *event_set, const nxt_event_sig_t *signals, 680Sigor@sysoev.ru nxt_uint_t flags, nxt_uint_t batch); 690Sigor@sysoev.ru NXT_EXPORT nxt_int_t nxt_event_engine_change(nxt_thread_t *thr, 701Sigor@sysoev.ru nxt_task_t *task, const nxt_event_set_ops_t *event_set, nxt_uint_t batch); 710Sigor@sysoev.ru NXT_EXPORT void nxt_event_engine_free(nxt_event_engine_t *engine); 720Sigor@sysoev.ru NXT_EXPORT void nxt_event_engine_start(nxt_event_engine_t *engine); 730Sigor@sysoev.ru 740Sigor@sysoev.ru NXT_EXPORT void nxt_event_engine_post(nxt_event_engine_t *engine, 75*4Sigor@sysoev.ru nxt_work_t *work); 760Sigor@sysoev.ru NXT_EXPORT void nxt_event_engine_signal(nxt_event_engine_t *engine, 770Sigor@sysoev.ru nxt_uint_t signo); 780Sigor@sysoev.ru 790Sigor@sysoev.ru 800Sigor@sysoev.ru nxt_inline nxt_event_engine_t * 810Sigor@sysoev.ru nxt_thread_event_engine(void) 820Sigor@sysoev.ru { 830Sigor@sysoev.ru nxt_thread_t *thr; 840Sigor@sysoev.ru 850Sigor@sysoev.ru thr = nxt_thread(); 860Sigor@sysoev.ru return thr->engine; 870Sigor@sysoev.ru } 880Sigor@sysoev.ru 890Sigor@sysoev.ru 900Sigor@sysoev.ru #endif /* _NXT_EVENT_ENGINE_H_INCLUDED_ */ 91