]>
jfr.im git - solanum.git/blob - ircd/ircd_signal.c
1 /************************************************************************
2 * IRC - Internet Relay Chat, src/ircd_signal.c
3 * Copyright (C) 1990 Jarkko Oikarinen and
4 * University of Oulu, Computing Center
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 1, or (at your option)
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 #include "ircd_signal.h"
23 #include "ircd.h" /* dorehash */
24 #include "restart.h" /* server_reboot */
32 #include <sys/types.h>
36 * dummy_handler - don't know if this is really needed but if alarm is still
37 * being used we probably will
40 dummy_handler(int sig
)
47 sigchld_handler(int sig
)
52 while (waitpid(-1, &status
, WNOHANG
) > 0)
58 * sigterm_handler - exit the server
61 sigterm_handler(int sig
) __attribute__((noreturn
));
64 sigterm_handler(int sig
)
66 ircd_shutdown("Received SIGTERM");
70 * sighup_handler - reread the server configuration
73 sighup_handler(int sig
)
79 * sigusr1_handler - reread the motd file
82 sigusr1_handler(int sig
)
88 sigusr2_handler(int sig
)
94 * sigint_handler - restart the server
97 sigint_handler(int sig
)
99 static bool restarting
= false;
101 if(server_state_foreground
)
103 ilog(L_MAIN
, "Server exiting on SIGINT");
108 ilog(L_MAIN
, "Server Restarting on SIGINT");
118 * setup_signals - initialize signal handlers for server
124 struct sigaction act
;
128 act
.sa_handler
= SIG_IGN
;
129 sigemptyset(&act
.sa_mask
);
130 sigaddset(&act
.sa_mask
, SIGPIPE
);
131 sigaddset(&act
.sa_mask
, SIGALRM
);
133 sigaddset(&act
.sa_mask
, SIGTRAP
);
137 sigaddset(&act
.sa_mask
, SIGWINCH
);
138 sigaction(SIGWINCH
, &act
, 0);
140 sigaction(SIGPIPE
, &act
, 0);
142 sigaction(SIGTRAP
, &act
, 0);
145 act
.sa_handler
= dummy_handler
;
146 sigaction(SIGALRM
, &act
, 0);
147 sigaddset(&sigs
, SIGALRM
);
149 act
.sa_handler
= sighup_handler
;
150 sigemptyset(&act
.sa_mask
);
151 sigaddset(&act
.sa_mask
, SIGHUP
);
152 sigaction(SIGHUP
, &act
, 0);
153 sigaddset(&sigs
, SIGHUP
);
155 act
.sa_handler
= sigint_handler
;
156 sigaddset(&act
.sa_mask
, SIGINT
);
157 sigaction(SIGINT
, &act
, 0);
158 sigaddset(&sigs
, SIGINT
);
160 act
.sa_handler
= sigterm_handler
;
161 sigaddset(&act
.sa_mask
, SIGTERM
);
162 sigaction(SIGTERM
, &act
, 0);
163 sigaddset(&sigs
, SIGTERM
);
165 act
.sa_handler
= sigusr1_handler
;
166 sigaddset(&act
.sa_mask
, SIGUSR1
);
167 sigaction(SIGUSR1
, &act
, 0);
168 sigaddset(&sigs
, SIGUSR1
);
170 act
.sa_handler
= sigusr2_handler
;
171 sigaddset(&act
.sa_mask
, SIGUSR2
);
172 sigaction(SIGUSR2
, &act
, 0);
173 sigaddset(&sigs
, SIGUSR2
);
175 act
.sa_handler
= sigchld_handler
;
176 sigaddset(&act
.sa_mask
, SIGCHLD
);
177 sigaction(SIGCHLD
, &act
, 0);
178 sigaddset(&sigs
, SIGCHLD
);
180 sigprocmask(SIG_UNBLOCK
, &sigs
, NULL
);
187 /* this is a stub for mingw32 */
191 setup_reboot_signals()
193 /* this is a stub for mingw32 */