master
h 94 lines 3.42 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #ifndef NETDATA_EXIT_INITIATED_H
4 #define NETDATA_EXIT_INITIATED_H
5
6 #include "../libnetdata-base.h"
7 #include "../template-enum.h"
8
9 typedef enum {
10 EXIT_REASON_NONE = 0,
11
12 // signals - abnormal termination
13 EXIT_REASON_SIGBUS = (1 << 0),
14 EXIT_REASON_SIGSEGV = (1 << 1),
15 EXIT_REASON_SIGFPE = (1 << 2),
16 EXIT_REASON_SIGILL = (1 << 3),
17 EXIT_REASON_SIGABRT = (1 << 4),
18 EXIT_REASON_SIGSYS = (1 << 5), // Bad system call
19 EXIT_REASON_SIGXCPU = (1 << 6), // CPU time limit exceeded
20 EXIT_REASON_SIGXFSZ = (1 << 7), // File size limit exceeded
21 EXIT_REASON_OUT_OF_MEMORY = (1 << 8),
22 EXIT_REASON_ALREADY_RUNNING = (1 << 9),
23
24 // abnormal termination via a fatal message
25 EXIT_REASON_FATAL = (1 << 10), // a fatal message
26
27 // normal termination via APIs
28 EXIT_REASON_API_QUIT = (1 << 11), // developer only
29 EXIT_REASON_CMD_EXIT = (1 << 12), // netdatacli
30
31 // signals - normal termination
32 EXIT_REASON_SIGQUIT = (1 << 13), // rare, but graceful
33 EXIT_REASON_SIGTERM = (1 << 14), // received on Linux, FreeBSD, MacOS
34 EXIT_REASON_SIGINT = (1 << 15), // received on Windows on normal termination
35
36 // windows specific, service stop
37 EXIT_REASON_SERVICE_STOP = (1 << 16),
38
39 // automatically detect when exit_initiated_set() is called
40 // supports Linux, FreeBSD, MacOS, Windows
41 EXIT_REASON_SYSTEM_SHUTDOWN = (1 << 17),
42
43 // netdata update
44 EXIT_REASON_UPDATE = (1 << 18),
45
46 // timeout while shutting down
47 EXIT_REASON_SHUTDOWN_TIMEOUT = (1 << 19),
48 } EXIT_REASON;
49
50 #define EXIT_REASON_NORMAL \
51 ( \
52 EXIT_REASON_SIGINT \
53 | EXIT_REASON_SIGTERM \
54 | EXIT_REASON_SIGQUIT \
55 | EXIT_REASON_API_QUIT \
56 | EXIT_REASON_CMD_EXIT \
57 | EXIT_REASON_SERVICE_STOP \
58 | EXIT_REASON_SYSTEM_SHUTDOWN \
59 | EXIT_REASON_UPDATE \
60 )
61
62 #define EXIT_REASON_DEADLY_SIGNAL \
63 ( \
64 EXIT_REASON_SIGBUS \
65 | EXIT_REASON_SIGSEGV \
66 | EXIT_REASON_SIGFPE \
67 | EXIT_REASON_SIGILL \
68 | EXIT_REASON_SIGSYS \
69 | EXIT_REASON_SIGXCPU \
70 | EXIT_REASON_SIGXFSZ \
71 )
72
73 #define EXIT_REASON_ABNORMAL \
74 ( \
75 EXIT_REASON_DEADLY_SIGNAL \
76 | EXIT_REASON_SIGABRT \
77 | EXIT_REASON_FATAL \
78 | EXIT_REASON_ALREADY_RUNNING \
79 | EXIT_REASON_OUT_OF_MEMORY \
80 | EXIT_REASON_SHUTDOWN_TIMEOUT \
81 )
82
83 #define is_deadly_signal(reason) ((reason) & (EXIT_REASON_DEADLY_SIGNAL))
84 #define is_exit_reason_normal(reason) (((reason == EXIT_REASON_NONE) || ((reason) & EXIT_REASON_NORMAL)) && !((reason) & EXIT_REASON_ABNORMAL))
85
86 typedef struct web_buffer BUFFER;
87 BITMAP_STR_DEFINE_FUNCTIONS_EXTERN(EXIT_REASON);
88
89 void exit_initiated_init(void);
90 EXIT_REASON exit_initiated_get(void);
91 void exit_initiated_set(EXIT_REASON reason);
92 void exit_initiated_add(EXIT_REASON reason);
93
94 #endif //NETDATA_EXIT_INITIATED_H