xref: /unit/src/nxt_signal.h (revision 12:477899a6661b)
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