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 /* The engine ID, the main engine has ID 0. */ 27 uint32_t id; 28 29 /* 30 * A pipe to pass event signals to the engine, if the engine's 31 * underlying event facility does not support user events. 32 */ 33 nxt_event_engine_pipe_t *pipe; 34 35 nxt_work_queue_t accept_work_queue; 36 nxt_work_queue_t read_work_queue; 37 nxt_work_queue_t socket_work_queue; 38 nxt_work_queue_t connect_work_queue; 39 nxt_work_queue_t write_work_queue; 40 nxt_work_queue_t shutdown_work_queue; 41 nxt_work_queue_t close_work_queue; 42 43 nxt_locked_work_queue_t work_queue; 44 45 nxt_event_signals_t *signals; 46 47 nxt_fiber_main_t *fibers; 48 49 uint8_t shutdown; /* 1 bit */ 50 51 uint32_t batch; 52 uint32_t connections; 53 uint32_t max_connections; 54 55 nxt_queue_t listen_connections; 56 nxt_queue_t idle_connections; 57 }; 58 59 60 NXT_EXPORT nxt_event_engine_t *nxt_event_engine_create(nxt_thread_t *thr, 61 const nxt_event_set_ops_t *event_set, const nxt_event_sig_t *signals, 62 nxt_uint_t flags, nxt_uint_t batch); 63 NXT_EXPORT nxt_int_t nxt_event_engine_change(nxt_thread_t *thr, 64 const nxt_event_set_ops_t *event_set, nxt_uint_t batch); 65 NXT_EXPORT void nxt_event_engine_free(nxt_event_engine_t *engine); 66 NXT_EXPORT void nxt_event_engine_start(nxt_event_engine_t *engine); 67 68 NXT_EXPORT void nxt_event_engine_post(nxt_event_engine_t *engine, 69 nxt_work_handler_t handler, void *obj, void *data, nxt_log_t *log); 70 NXT_EXPORT void nxt_event_engine_signal(nxt_event_engine_t *engine, 71 nxt_uint_t signo); 72 73 74 nxt_inline nxt_event_engine_t * 75 nxt_thread_event_engine(void) 76 { 77 nxt_thread_t *thr; 78 79 thr = nxt_thread(); 80 return thr->engine; 81 } 82 83 84 nxt_inline nxt_work_queue_t * 85 nxt_thread_main_work_queue(void) 86 { 87 nxt_thread_t *thr; 88 89 thr = nxt_thread(); 90 return &thr->work_queue.main; 91 } 92 93 94 #endif /* _NXT_EVENT_ENGINE_H_INCLUDED_ */ 95