Commit 746d64e6 authored by Roger Dingledine's avatar Roger Dingledine
Browse files

add in basic support for pidfiles

(patch courtesy aaron turner)


svn:r565
parent 8b80362c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -153,6 +153,7 @@ static void config_assign(or_options_t *options, struct config_line *list) {
    config_compare(list, "LogLevel",       CONFIG_TYPE_STRING, &options->LogLevel) ||
    config_compare(list, "DataDirectory",  CONFIG_TYPE_STRING, &options->DataDirectory) ||
    config_compare(list, "RouterFile",     CONFIG_TYPE_STRING, &options->RouterFile) ||
    config_compare(list, "PidFile",        CONFIG_TYPE_STRING, &options->PidFile) ||
    config_compare(list, "Nickname",       CONFIG_TYPE_STRING, &options->Nickname) ||
    config_compare(list, "Address",        CONFIG_TYPE_STRING, &options->Address) ||
    config_compare(list, "ExitPolicy",     CONFIG_TYPE_STRING, &options->ExitPolicy) ||
@@ -201,6 +202,7 @@ int getconfig(int argc, char **argv, or_options_t *options) {
  options->LogLevel = "info";
  options->ExitPolicy = "reject 127.0.0.1:*,reject 18.244.0.188:25,accept *:*";
  options->loglevel = LOG_DEBUG;
  options->PidFile = "tor.pid";
  options->DataDirectory = NULL;
  options->CoinWeight = 0.1;
  options->MaxConn = 900;
+18 −0
Original line number Diff line number Diff line
@@ -637,6 +637,9 @@ static void catch(int the_signal) {
    case SIGTERM:
    case SIGINT:
      log(LOG_ERR,"Catching signal %d, exiting cleanly.", the_signal);
      /* we don't care if there was an error when we unlink,
         nothing we could do about it anyways */
      unlink(options.PidFile);
      exit(0);
    case SIGHUP:
      please_reset = 1;
@@ -724,6 +727,18 @@ void daemonize(void) {
#endif
}

void write_pidfile(char *filename) {
  FILE *pidfile;

  if ((pidfile = fopen(filename, "w")) == NULL) {
    log_fn(LOG_WARNING, "unable to open %s for writing: %s", filename,
           strerror(errno));
  } else {
    fprintf(pidfile, "%d", getpid());
    fclose(pidfile);
  }
}

int tor_main(int argc, char *argv[]) {

  if(getconfig(argc,argv,&options)) {
@@ -734,6 +749,9 @@ int tor_main(int argc, char *argv[]) {
  global_read_bucket = options.TotalBandwidth; /* start it at 1 second of traffic */
  stats_prev_global_read_bucket = global_read_bucket;

  /* write our pid to the pid file */
  write_pidfile(options.PidFile);

  if(options.Daemon)
    daemonize();

+1 −0
Original line number Diff line number Diff line
@@ -421,6 +421,7 @@ typedef struct {
   char *RouterFile;
   char *Nickname;
   char *Address;
   char *PidFile;
   char *ExitPolicy;
   double CoinWeight;
   int Daemon;