Branch data 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 : 325 : Return init_signals(void)
14 : : {
15 : : /* Status returned by this function through provide()
16 : : Default value assumes successful completion */
17 : 325 : Return status = SUCCESS;
18 : :
19 : : /// Disable key echo in terminal
20 : : struct termios term;
21 : 325 : tcgetattr(fileno(stdin),&term);
22 : 325 : term.c_lflag &= (unsigned int)~(ICANON|ECHO); // knock down keybuffer
23 : 325 : tcsetattr(fileno(stdin),TCSANOW,&term);
24 : :
25 : : // kill -USR2 <pid>
26 [ - + ]: 325 : if((signal(SIGUSR2,&signal_notify_quit_handler)==SIG_ERR)!=0)
27 : : {
28 : 0 : slog(ERROR,"Failed set signal SIGUSR2\n");
29 : 0 : status = FAILURE;
30 : : } else {
31 : 325 : slog(TRACE,"Set signal SIGUSR2 OK:pid:%i\n",getpid());
32 : : }
33 : :
34 : : // Ctrl-C
35 [ - + ]: 325 : if((signal(SIGINT,&signal_notify_quit_handler)==SIG_ERR)!=0)
36 : : {
37 : 0 : slog(ERROR,"Failed set signal SIGINT\n");
38 : 0 : status = FAILURE;
39 : : } else {
40 : 325 : slog(TRACE,"Set signal SIGINT OK:pid:%i\n",getpid());
41 : : }
42 : :
43 : : // Default kill Termination signal (15)
44 [ - + ]: 325 : if((signal(SIGTERM,&signal_notify_quit_handler)==SIG_ERR)!=0)
45 : : {
46 : 0 : slog(ERROR,"Failed set signal SIGTERM\n");
47 : 0 : status = FAILURE;
48 : : } else {
49 : 325 : slog(TRACE,"Set signal SIGTERM OK:pid:%i\n",getpid());
50 : : }
51 : :
52 : 325 : slog(TRACE,"Signals initialized\n");
53 : :
54 : 325 : provide(status);
55 : : }
|