1 2 /* 3 * Copyright (C) Igor Sysoev 4 * Copyright (C) NGINX, Inc. 5 */ 6 7 #ifndef _NXT_SIGNAL_H_INCLUDED_ 8 #define _NXT_SIGNAL_H_INCLUDED_ 9 10 11 typedef struct { 12 int signo; 13 nxt_work_handler_t handler; 14 const char *name; 15 } nxt_sig_event_t; 16 17 #define nxt_event_signal(sig, handler) \ 18 { sig, handler, #sig } 19 20 #define nxt_event_signal_end \ 21 { 0, NULL, NULL } 22 23 24 typedef struct { 25 /* Used by epoll and eventport. */ 26 nxt_work_handler_t handler; 27 28 const nxt_sig_event_t *sigev; 29 sigset_t sigmask; 30 31 #if (NXT_THREADS) 32 /* Used by the signal thread. */ 33 nxt_pid_t process; 34 nxt_thread_handle_t thread; 35 #endif 36 } nxt_event_signals_t; 37 38 39 nxt_event_signals_t *nxt_event_engine_signals(const nxt_sig_event_t *sigev); 40 41 #if (NXT_THREADS) 42 43 #define \ 44 nxt_event_engine_signals_start(engine) \ 45 nxt_signal_thread_start(engine) 46 47 #define \ 48 nxt_event_engine_signals_stop(engine) \ 49 nxt_signal_thread_stop(engine) 50 51 52 NXT_EXPORT nxt_int_t nxt_signal_thread_start(nxt_event_engine_t *engine); 53 NXT_EXPORT void nxt_signal_thread_stop(nxt_event_engine_t *engine); 54 55 #else /* !(NXT_THREADS) */ 56 57 #define \ 58 nxt_event_engine_signals_start(engine) \ 59 nxt_signal_handlers_start(engine) 60 61 #define \ 62 nxt_event_engine_signals_stop(engine) \ 63 nxt_signal_handlers_stop(engine) 64 65 66 NXT_EXPORT nxt_int_t nxt_signal_handlers_start(nxt_event_engine_t *engine); 67 NXT_EXPORT void nxt_signal_handlers_stop(nxt_event_engine_t *engine); 68 69 #endif 70 71 72 #endif /* _NXT_SIGNAL_H_INCLUDED_ */ 73