Mercurial > dovecot > core-2.2
annotate src/lib/lib-signals.h @ 22664:fea53c2725c0
director: Fix director_max_parallel_moves/kicks type
Should be uint, not time.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 09 Nov 2017 12:24:16 +0200 |
parents | b3897f959cb4 |
children |
rev | line source |
---|---|
6410
e4eb71ae8e96
Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents:
4906
diff
changeset
|
1 #ifndef LIB_SIGNALS_H |
e4eb71ae8e96
Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents:
4906
diff
changeset
|
2 #define LIB_SIGNALS_H |
0 | 3 |
3620
3360cc019737
Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents:
2880
diff
changeset
|
4 #include <signal.h> |
3360cc019737
Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents:
2880
diff
changeset
|
5 |
13064
86e4023d08e4
lib_signals_set_handler(): Changed API to take flags instead of boolean.
Timo Sirainen <tss@iki.fi>
parents:
12117
diff
changeset
|
6 enum libsig_flags { |
86e4023d08e4
lib_signals_set_handler(): Changed API to take flags instead of boolean.
Timo Sirainen <tss@iki.fi>
parents:
12117
diff
changeset
|
7 /* Signal handler will be called later from IO loop when it's safe to |
86e4023d08e4
lib_signals_set_handler(): Changed API to take flags instead of boolean.
Timo Sirainen <tss@iki.fi>
parents:
12117
diff
changeset
|
8 do any kind of work */ |
86e4023d08e4
lib_signals_set_handler(): Changed API to take flags instead of boolean.
Timo Sirainen <tss@iki.fi>
parents:
12117
diff
changeset
|
9 LIBSIG_FLAG_DELAYED = 0x01, |
86e4023d08e4
lib_signals_set_handler(): Changed API to take flags instead of boolean.
Timo Sirainen <tss@iki.fi>
parents:
12117
diff
changeset
|
10 /* Restart syscalls instead of having them fail with EINTR */ |
86e4023d08e4
lib_signals_set_handler(): Changed API to take flags instead of boolean.
Timo Sirainen <tss@iki.fi>
parents:
12117
diff
changeset
|
11 LIBSIG_FLAG_RESTART = 0x02 |
86e4023d08e4
lib_signals_set_handler(): Changed API to take flags instead of boolean.
Timo Sirainen <tss@iki.fi>
parents:
12117
diff
changeset
|
12 }; |
86e4023d08e4
lib_signals_set_handler(): Changed API to take flags instead of boolean.
Timo Sirainen <tss@iki.fi>
parents:
12117
diff
changeset
|
13 #define LIBSIG_FLAGS_SAFE (LIBSIG_FLAG_DELAYED | LIBSIG_FLAG_RESTART) |
86e4023d08e4
lib_signals_set_handler(): Changed API to take flags instead of boolean.
Timo Sirainen <tss@iki.fi>
parents:
12117
diff
changeset
|
14 |
8882
9f3968f49ceb
lib-signals: Changed callback API to return siginfo_t.
Timo Sirainen <tss@iki.fi>
parents:
8367
diff
changeset
|
15 typedef void signal_handler_t(const siginfo_t *si, void *context); |
0 | 16 |
12117
7f364dafc675
Added signal_term_counter that keeps track of how many terminal signals have been received.
Timo Sirainen <tss@iki.fi>
parents:
9031
diff
changeset
|
17 /* Number of times a "termination signal" has been received. |
7f364dafc675
Added signal_term_counter that keeps track of how many terminal signals have been received.
Timo Sirainen <tss@iki.fi>
parents:
9031
diff
changeset
|
18 These signals are SIGINT, SIGQUIT and SIGTERM. Callers can compare this to |
7f364dafc675
Added signal_term_counter that keeps track of how many terminal signals have been received.
Timo Sirainen <tss@iki.fi>
parents:
9031
diff
changeset
|
19 their saved previous value to see if a syscall returning EINTR should be |
7f364dafc675
Added signal_term_counter that keeps track of how many terminal signals have been received.
Timo Sirainen <tss@iki.fi>
parents:
9031
diff
changeset
|
20 treated as someone wanting to end the process or just some internal signal |
7f364dafc675
Added signal_term_counter that keeps track of how many terminal signals have been received.
Timo Sirainen <tss@iki.fi>
parents:
9031
diff
changeset
|
21 that should be ignored, such as SIGCHLD. |
7f364dafc675
Added signal_term_counter that keeps track of how many terminal signals have been received.
Timo Sirainen <tss@iki.fi>
parents:
9031
diff
changeset
|
22 |
7f364dafc675
Added signal_term_counter that keeps track of how many terminal signals have been received.
Timo Sirainen <tss@iki.fi>
parents:
9031
diff
changeset
|
23 This is marked as volatile so that compiler won't optimize away its |
7f364dafc675
Added signal_term_counter that keeps track of how many terminal signals have been received.
Timo Sirainen <tss@iki.fi>
parents:
9031
diff
changeset
|
24 comparisons. It may not work perfectly everywhere, such as when accessing it |
7f364dafc675
Added signal_term_counter that keeps track of how many terminal signals have been received.
Timo Sirainen <tss@iki.fi>
parents:
9031
diff
changeset
|
25 isn't atomic, so you shouldn't heavily rely on its actual value. */ |
7f364dafc675
Added signal_term_counter that keeps track of how many terminal signals have been received.
Timo Sirainen <tss@iki.fi>
parents:
9031
diff
changeset
|
26 extern volatile unsigned int signal_term_counter; |
7f364dafc675
Added signal_term_counter that keeps track of how many terminal signals have been received.
Timo Sirainen <tss@iki.fi>
parents:
9031
diff
changeset
|
27 |
8883
5361cb6afe9e
When a process is killed, show the signal code and the sending process's pid and uid.
Timo Sirainen <tss@iki.fi>
parents:
8882
diff
changeset
|
28 /* Convert si_code to string */ |
9031
bfbbae6cdb51
Compile fix to NetBSD: Don't use si_code which is a macro.
Timo Sirainen <tss@iki.fi>
parents:
8883
diff
changeset
|
29 const char *lib_signal_code_to_str(int signo, int sicode); |
8883
5361cb6afe9e
When a process is killed, show the signal code and the sending process's pid and uid.
Timo Sirainen <tss@iki.fi>
parents:
8882
diff
changeset
|
30 |
13064
86e4023d08e4
lib_signals_set_handler(): Changed API to take flags instead of boolean.
Timo Sirainen <tss@iki.fi>
parents:
12117
diff
changeset
|
31 /* Set signal handler for specific signal. */ |
86e4023d08e4
lib_signals_set_handler(): Changed API to take flags instead of boolean.
Timo Sirainen <tss@iki.fi>
parents:
12117
diff
changeset
|
32 void lib_signals_set_handler(int signo, enum libsig_flags flags, |
14629
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
13064
diff
changeset
|
33 signal_handler_t *handler, void *context) |
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
13064
diff
changeset
|
34 ATTR_NULL(4); |
4903
204d7edc7cdc
Added context parameter type safety checks for most callback APIs.
Timo Sirainen <tss@iki.fi>
parents:
4252
diff
changeset
|
35 /* Ignore given signal. */ |
204d7edc7cdc
Added context parameter type safety checks for most callback APIs.
Timo Sirainen <tss@iki.fi>
parents:
4252
diff
changeset
|
36 void lib_signals_ignore(int signo, bool restart_syscalls); |
3620
3360cc019737
Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents:
2880
diff
changeset
|
37 void lib_signals_unset_handler(int signo, |
14629
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
13064
diff
changeset
|
38 signal_handler_t *handler, void *context) |
c93ca5e46a8a
Marked functions parameters that are allowed to be NULL. Some APIs were also changed.
Timo Sirainen <tss@iki.fi>
parents:
13064
diff
changeset
|
39 ATTR_NULL(3); |
3620
3360cc019737
Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents:
2880
diff
changeset
|
40 |
8367
0d49326397b4
Added lib_signals_reset_ioloop() for handling signals with multiple ioloops.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
41 /* Remove and add the internal I/O handler back. This is necessary to get |
0d49326397b4
Added lib_signals_reset_ioloop() for handling signals with multiple ioloops.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
42 the delayed signals to work when using multiple I/O loops. */ |
0d49326397b4
Added lib_signals_reset_ioloop() for handling signals with multiple ioloops.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
43 void lib_signals_reset_ioloop(void); |
0d49326397b4
Added lib_signals_reset_ioloop() for handling signals with multiple ioloops.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
44 |
22023
b3897f959cb4
lib: Add lib_signals_syscall_error()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
14629
diff
changeset
|
45 /* Log a syscall error inside a (non-delayed) signal handler where i_error() is |
b3897f959cb4
lib: Add lib_signals_syscall_error()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
14629
diff
changeset
|
46 unsafe. errno number will be appended to the prefix. */ |
b3897f959cb4
lib: Add lib_signals_syscall_error()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
14629
diff
changeset
|
47 void lib_signals_syscall_error(const char *prefix); |
b3897f959cb4
lib: Add lib_signals_syscall_error()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
14629
diff
changeset
|
48 |
3620
3360cc019737
Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents:
2880
diff
changeset
|
49 void lib_signals_init(void); |
3360cc019737
Implemented new signal handling framework, which makes handling signals much
Timo Sirainen <tss@iki.fi>
parents:
2880
diff
changeset
|
50 void lib_signals_deinit(void); |
0 | 51 |
52 #endif |