xref: /unit/src/nxt_event_engine.h (revision 4)
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