xref: /unit/src/nxt_signal.h (revision 20)
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 
712Sigor@sysoev.ru #ifndef _NXT_SIGNAL_H_INCLUDED_
812Sigor@sysoev.ru #define _NXT_SIGNAL_H_INCLUDED_
90Sigor@sysoev.ru 
100Sigor@sysoev.ru 
11*20Sigor@sysoev.ru struct nxt_sig_event_s {
120Sigor@sysoev.ru     int                         signo;
130Sigor@sysoev.ru     nxt_work_handler_t          handler;
140Sigor@sysoev.ru     const char                  *name;
15*20Sigor@sysoev.ru };
160Sigor@sysoev.ru 
170Sigor@sysoev.ru #define nxt_event_signal(sig, handler)                                        \
180Sigor@sysoev.ru     { sig, handler, #sig }
190Sigor@sysoev.ru 
200Sigor@sysoev.ru #define nxt_event_signal_end                                                  \
210Sigor@sysoev.ru     { 0, NULL, NULL }
220Sigor@sysoev.ru 
230Sigor@sysoev.ru 
240Sigor@sysoev.ru typedef struct {
250Sigor@sysoev.ru     /* Used by epoll and eventport. */
260Sigor@sysoev.ru     nxt_work_handler_t          handler;
270Sigor@sysoev.ru 
2812Sigor@sysoev.ru     const nxt_sig_event_t       *sigev;
290Sigor@sysoev.ru     sigset_t                    sigmask;
300Sigor@sysoev.ru 
310Sigor@sysoev.ru #if (NXT_THREADS)
320Sigor@sysoev.ru     /* Used by the signal thread. */
330Sigor@sysoev.ru     nxt_pid_t                   process;
340Sigor@sysoev.ru     nxt_thread_handle_t         thread;
350Sigor@sysoev.ru #endif
360Sigor@sysoev.ru } nxt_event_signals_t;
370Sigor@sysoev.ru 
380Sigor@sysoev.ru 
3912Sigor@sysoev.ru nxt_event_signals_t *nxt_event_engine_signals(const nxt_sig_event_t *sigev);
400Sigor@sysoev.ru 
410Sigor@sysoev.ru #if (NXT_THREADS)
420Sigor@sysoev.ru 
430Sigor@sysoev.ru #define                                                                       \
440Sigor@sysoev.ru nxt_event_engine_signals_start(engine)                                        \
450Sigor@sysoev.ru     nxt_signal_thread_start(engine)
460Sigor@sysoev.ru 
470Sigor@sysoev.ru #define                                                                       \
480Sigor@sysoev.ru nxt_event_engine_signals_stop(engine)                                         \
490Sigor@sysoev.ru     nxt_signal_thread_stop(engine)
500Sigor@sysoev.ru 
510Sigor@sysoev.ru 
520Sigor@sysoev.ru NXT_EXPORT nxt_int_t nxt_signal_thread_start(nxt_event_engine_t *engine);
530Sigor@sysoev.ru NXT_EXPORT void nxt_signal_thread_stop(nxt_event_engine_t *engine);
540Sigor@sysoev.ru 
550Sigor@sysoev.ru #else /* !(NXT_THREADS) */
560Sigor@sysoev.ru 
570Sigor@sysoev.ru #define                                                                       \
580Sigor@sysoev.ru nxt_event_engine_signals_start(engine)                                        \
590Sigor@sysoev.ru     nxt_signal_handlers_start(engine)
600Sigor@sysoev.ru 
610Sigor@sysoev.ru #define                                                                       \
620Sigor@sysoev.ru nxt_event_engine_signals_stop(engine)                                         \
630Sigor@sysoev.ru     nxt_signal_handlers_stop(engine)
640Sigor@sysoev.ru 
650Sigor@sysoev.ru 
660Sigor@sysoev.ru NXT_EXPORT nxt_int_t nxt_signal_handlers_start(nxt_event_engine_t *engine);
670Sigor@sysoev.ru NXT_EXPORT void nxt_signal_handlers_stop(nxt_event_engine_t *engine);
680Sigor@sysoev.ru 
690Sigor@sysoev.ru #endif
700Sigor@sysoev.ru 
710Sigor@sysoev.ru 
7212Sigor@sysoev.ru #endif /* _NXT_SIGNAL_H_INCLUDED_ */
73