catch signals in a more portable way, so solaris can catch them too

svn:r1324
This commit is contained in:
Roger Dingledine 2004-03-20 23:27:22 +00:00
parent e9b67e1e6a
commit 3d2c6c7cfa

View File

@ -729,7 +729,7 @@ int tor_main(int argc, char *argv[]) {
if(geteuid()==0) if(geteuid()==0)
log_fn(LOG_WARN,"You are running Tor as root. You don't need to, and you probably shouldn't."); log_fn(LOG_WARN,"You are running Tor as root. You don't need to, and you probably shouldn't.");
#endif #endif
if(options.ORPort) { /* only spawn dns handlers if we're a router */ if(options.ORPort) { /* only spawn dns handlers if we're a router */
dns_init(); /* initialize the dns resolve tree, and spawn workers */ dns_init(); /* initialize the dns resolve tree, and spawn workers */
} }
@ -738,12 +738,19 @@ int tor_main(int argc, char *argv[]) {
} }
#ifndef MS_WINDOWS /* do signal stuff only on unix */ #ifndef MS_WINDOWS /* do signal stuff only on unix */
signal (SIGINT, catch); /* catch kills so we can exit cleanly */ {
signal (SIGTERM, catch); struct sigaction action;
signal (SIGPIPE, catch); action.sa_flags = 0;
signal (SIGUSR1, catch); /* to dump stats */ sigemptyset(&action.sa_mask);
signal (SIGHUP, catch); /* to reload directory */
signal (SIGCHLD, catch); /* for exiting dns/cpu workers */ action.sa_handler = catch;
sigaction(SIGINT, &action, NULL);
sigaction(SIGTERM, &action, NULL);
sigaction(SIGPIPE, &action, NULL);
sigaction(SIGUSR1, &action, NULL);
sigaction(SIGHUP, &action, NULL); /* to reload config, retry conns, etc */
sigaction(SIGCHLD, &action, NULL); /* handle dns/cpu workers that exit */
}
#endif /* signal stuff */ #endif /* signal stuff */
crypto_global_init(); crypto_global_init();