|
@@ -729,7 +729,7 @@ int tor_main(int argc, char *argv[]) {
|
|
|
if(geteuid()==0)
|
|
|
log_fn(LOG_WARN,"You are running Tor as root. You don't need to, and you probably shouldn't.");
|
|
|
#endif
|
|
|
-
|
|
|
+
|
|
|
if(options.ORPort) { /* only spawn dns handlers if we're a router */
|
|
|
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 */
|
|
|
- signal (SIGINT, catch); /* catch kills so we can exit cleanly */
|
|
|
- signal (SIGTERM, catch);
|
|
|
- signal (SIGPIPE, catch);
|
|
|
- signal (SIGUSR1, catch); /* to dump stats */
|
|
|
- signal (SIGHUP, catch); /* to reload directory */
|
|
|
- signal (SIGCHLD, catch); /* for exiting dns/cpu workers */
|
|
|
+{
|
|
|
+ struct sigaction action;
|
|
|
+ action.sa_flags = 0;
|
|
|
+ sigemptyset(&action.sa_mask);
|
|
|
+
|
|
|
+ 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 */
|
|
|
|
|
|
crypto_global_init();
|