Changes in unix.c [c467adc:5535a47]
Legend:
- Unmodified
- Added
- Removed
-
unix.c
rc467adc r5535a47 48 48 global_t global; /* Against global namespace pollution */ 49 49 50 static struct { 51 int fd[2]; 52 int tag; 53 } shutdown_pipe = {{-1 , -1}, 0}; 54 50 static int signal_shutdown_pipe[2] = { -1, -1 }; 55 51 static void sighandler_shutdown(int signal); 56 52 static void sighandler_crash(int signal); … … 160 156 sigaction(SIGSEGV, &sig, &old); 161 157 162 sighandler_shutdown_setup(); 163 164 sig.sa_handler = sighandler_shutdown; 165 sigaction(SIGINT, &sig, &old); 166 sigaction(SIGTERM, &sig, &old); 158 /* Use a pipe for SIGTERM/SIGINT so the actual signal handler doesn't do anything unsafe */ 159 if (pipe(signal_shutdown_pipe) == 0) { 160 b_input_add(signal_shutdown_pipe[0], B_EV_IO_READ, bitlbee_shutdown, NULL); 161 sig.sa_handler = sighandler_shutdown; 162 sigaction(SIGINT, &sig, &old); 163 sigaction(SIGTERM, &sig, &old); 164 } 167 165 168 166 if (!getuid() || !geteuid()) { … … 258 256 } 259 257 260 /* Set up a pipe for SIGTERM/SIGINT so the actual signal handler doesn't do anything unsafe */261 void sighandler_shutdown_setup()262 {263 if (shutdown_pipe.fd[0] != -1) {264 /* called again from a forked process, clean up to avoid propagating the signal */265 b_event_remove(shutdown_pipe.tag);266 close(shutdown_pipe.fd[0]);267 close(shutdown_pipe.fd[1]);268 }269 270 if (pipe(shutdown_pipe.fd) == 0) {271 shutdown_pipe.tag = b_input_add(shutdown_pipe.fd[0], B_EV_IO_READ, bitlbee_shutdown, NULL);272 }273 }274 275 258 /* Signal handler for SIGTERM and SIGINT */ 276 259 static void sighandler_shutdown(int signal) … … 278 261 /* Write a single null byte to the pipe, just to send a message to the main loop. 279 262 * This gets handled by bitlbee_shutdown (the b_input_add callback for this pipe) */ 280 write(s hutdown_pipe.fd[1], "", 1);263 write(signal_shutdown_pipe[1], "", 1); 281 264 } 282 265 … … 292 275 for (l = irc_connection_list; l; l = l->next) { 293 276 irc_t *irc = l->data; 294 sock_make_blocking(irc->fd);295 277 write(irc->fd, message, len); 296 278 }
Note: See TracChangeset
for help on using the changeset viewer.