1 2 /* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7 #ifndef _NXT_EVENT_ENGINE_H_INCLUDED_ 8 #define _NXT_EVENT_ENGINE_H_INCLUDED_ 9 10 11 #define NXT_ENGINE_FIBERS 1 12 13 14 typedef struct { 15 nxt_fd_t fds[2]; 16 nxt_event_fd_t event; 17 } nxt_event_engine_pipe_t; 18 19 20 struct nxt_event_engine_s { 21 const nxt_event_set_ops_t *event; 22 nxt_event_set_t *event_set; 23 24 nxt_event_timers_t timers; 25 26 nxt_task_t task; 27 /* The engine ID, the main engine has ID 0. */ 28 uint32_t id; 29 30 /* 31 * A pipe to pass event signals to the engine, if the engine's 32 * underlying event facility does not support user events. 33 */ 34 nxt_event_engine_pipe_t *pipe; 35 36 nxt_work_queue_t accept_work_queue; 37 nxt_work_queue_t read_work_queue; 38 nxt_work_queue_t socket_work_queue; 39 nxt_work_queue_t connect_work_queue; 40 nxt_work_queue_t write_work_queue; 41 nxt_work_queue_t shutdown_work_queue; 42 nxt_work_queue_t close_work_queue; 43 44 nxt_locked_work_queue_t work_queue; 45 46 nxt_event_signals_t *signals; 47 48 nxt_thread_t *thread; 49 nxt_fiber_main_t *fibers; 50 51 uint8_t shutdown; /* 1 bit */ 52 53 uint32_t batch; 54 uint32_t connections; 55 uint32_t max_connections; 56 57 nxt_queue_t listen_connections; 58 nxt_queue_t idle_connections; 59 }; 60 61 62 NXT_EXPORT nxt_event_engine_t *nxt_event_engine_create(nxt_thread_t *thr, 63 const nxt_event_set_ops_t *event_set, const nxt_event_sig_t *signals, 64 nxt_uint_t flags, nxt_uint_t batch); 65 NXT_EXPORT nxt_int_t nxt_event_engine_change(nxt_thread_t *thr, 66 nxt_task_t *task, const nxt_event_set_ops_t *event_set, nxt_uint_t batch); 67 NXT_EXPORT void nxt_event_engine_free(nxt_event_engine_t *engine); 68 NXT_EXPORT void nxt_event_engine_start(nxt_event_engine_t *engine); 69 70 NXT_EXPORT void nxt_event_engine_post(nxt_event_engine_t *engine, 71 nxt_work_handler_t handler, nxt_task_t *task, void *obj, void *data, 72 nxt_log_t *log); 73 NXT_EXPORT void nxt_event_engine_signal(nxt_event_engine_t *engine, 74 nxt_uint_t signo); 75 76 77 nxt_inline nxt_event_engine_t * 78 nxt_thread_event_engine(void) 79 { 80 nxt_thread_t *thr; 81 82 thr = nxt_thread(); 83 return thr->engine; 84 } 85 86 87 nxt_inline nxt_work_queue_t * 88 nxt_thread_main_work_queue(void) 89 { 90 nxt_thread_t *thr; 91 92 thr = nxt_thread(); 93 return &thr->work_queue.main; 94 } 95 96 97 #endif /* _NXT_EVENT_ENGINE_H_INCLUDED_ */ 98