Commit b3133d1c authored by Robert Ransom's avatar Robert Ransom
Browse files

Exit immediately if we can't monitor our owning controller process

tor_process_monitor_new can't currently return NULL, but if it ever can,
we want that to be an explicitly fatal error, without relying on the fact
that monitor_owning_controller_process's chain of caller will exit if it
fails.
parent 0caa37db
Loading
Loading
Loading
Loading
+1 −4
Original line number Diff line number Diff line
@@ -1232,10 +1232,7 @@ options_act(or_options_t *old_options)
    return -1;
  }

  if (monitor_owning_controller_process(options->OwningControllerProcess)) {
    log_warn(LD_CONFIG, "Error monitoring owning controller process");
    return -1;
  }
  monitor_owning_controller_process(options->OwningControllerProcess);

  /* reload keys as needed for rendezvous services. */
  if (rend_service_load_keys()<0) {
+10 −10
Original line number Diff line number Diff line
@@ -3815,8 +3815,8 @@ owning_controller_procmon_cb(void *unused)
}

/** Set <b>process_spec</b> as Tor's owning controller process.
 * Return 0 on success, -1 on failure. */
int
 * Exit on failure. */
void
monitor_owning_controller_process(const char *process_spec)
{
  const char *msg;
@@ -3829,7 +3829,7 @@ monitor_owning_controller_process(const char *process_spec)
                                          owning_controller_process_spec)) {
      /* Same process -- return now, instead of disposing of and
       * recreating the process-termination monitor. */
      return 0;
      return;
    }

    /* We are currently owned by a process, and we should no longer be
@@ -3845,7 +3845,7 @@ monitor_owning_controller_process(const char *process_spec)
             (owning_controller_process_monitor == NULL));

  if (process_spec == NULL)
    return 0;
    return;

  owning_controller_process_spec = tor_strdup(process_spec);
  owning_controller_process_monitor =
@@ -3856,13 +3856,13 @@ monitor_owning_controller_process(const char *process_spec)
                            &msg);

  if (owning_controller_process_monitor == NULL) {
    log_warn(LD_CONTROL, "Couldn't create process-termination monitor for "
             "owning controller: %s",
    log_err(LD_BUG, "Couldn't create process-termination monitor for "
            "owning controller: %s.  Exiting.",
            msg);
    return -1;
    owning_controller_process_spec = NULL;
    tor_cleanup();
    exit(0);
  }

  return 0;
}

/** Convert the name of a bootstrapping phase <b>s</b> into strings
+1 −1
Original line number Diff line number Diff line
@@ -70,7 +70,7 @@ smartlist_t *decode_hashed_passwords(config_line_t *passwords);
void disable_control_logging(void);
void enable_control_logging(void);

int monitor_owning_controller_process(const char *process_spec);
void monitor_owning_controller_process(const char *process_spec);

void control_event_bootstrap(bootstrap_status_t status, int progress);
void control_event_bootstrap_problem(const char *warn, int reason);