Line data Source code
1 : #include "precizer.h"
2 :
3 : /**
4 : *
5 : * Initialize signals interception like Ctrl+C
6 : * The application controls signals like Ctrl+C to
7 : * prevent database corruption.
8 : * It always try to complete work in correct way and
9 : * sync data from memory to disk even user interrupts
10 : * running of the program.
11 : *
12 : */
13 202 : Return init_signals(void)
14 : {
15 : /// The status that will be passed to return() before exiting.
16 : /// By default, the function worked without errors.
17 202 : Return status = SUCCESS;
18 :
19 : /// Disable key echo in terminal
20 : struct termios term;
21 202 : tcgetattr(fileno(stdin),&term);
22 202 : term.c_lflag &= (unsigned int)~(ICANON|ECHO); // knock down keybuffer
23 202 : tcsetattr(fileno(stdin),TCSANOW,&term);
24 :
25 : // kill -USR2 <pid>
26 202 : if((signal(SIGUSR2,¬ify_quit_handler)==SIG_ERR)!=0)
27 : {
28 0 : slog(ERROR,"Failed set signal SIGUSR2\n");
29 0 : status = FAILURE;
30 : } else {
31 202 : slog(TRACE,"Set signal SIGUSR2 OK:pid:%i\n",getpid());
32 : }
33 :
34 : // Ctrl-C
35 202 : if((signal(SIGINT,¬ify_quit_handler)==SIG_ERR)!=0)
36 : {
37 0 : slog(ERROR,"Failed set signal SIGINT\n");
38 0 : status = FAILURE;
39 : } else {
40 202 : slog(TRACE,"Set signal SIGINT OK:pid:%i\n",getpid());
41 : }
42 :
43 : // Default kill Termination signal (15)
44 202 : if((signal(SIGTERM,¬ify_quit_handler)==SIG_ERR)!=0)
45 : {
46 0 : slog(ERROR,"Failed set signal SIGTERM\n");
47 0 : status = FAILURE;
48 : } else {
49 202 : slog(TRACE,"Set signal SIGTERM OK:pid:%i\n",getpid());
50 : }
51 :
52 202 : slog(TRACE,"Signals initialized\n");
53 :
54 202 : provide(status);
55 : }
|