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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
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
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51
3b1985cbc908 Initial revision
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 #endif