aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ransom <rransom.8774@gmail.com>2011-05-16 10:25:59 -0700
committerRobert Ransom <rransom.8774@gmail.com>2011-05-20 08:25:42 -0700
commitb3133d1cadec0540105a855b1fd2eb741d4eec9d (patch)
treed00e7a402ff3c5c323e4e89654fa8904cb0891d8
parent0caa37db4df76fc50af48a107a14e4f139b7fa55 (diff)
downloadtor-b3133d1cadec0540105a855b1fd2eb741d4eec9d.tar
tor-b3133d1cadec0540105a855b1fd2eb741d4eec9d.tar.gz
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.
-rw-r--r--src/or/config.c5
-rw-r--r--src/or/control.c20
-rw-r--r--src/or/control.h2
3 files changed, 12 insertions, 15 deletions
diff --git a/src/or/config.c b/src/or/config.c
index b2bc9f3e9..0d1c37f6b 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -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) {
diff --git a/src/or/control.c b/src/or/control.c
index 3a9690443..67e8b00d1 100644
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -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",
- msg);
- return -1;
+ log_err(LD_BUG, "Couldn't create process-termination monitor for "
+ "owning controller: %s. Exiting.",
+ msg);
+ owning_controller_process_spec = NULL;
+ tor_cleanup();
+ exit(0);
}
-
- return 0;
}
/** Convert the name of a bootstrapping phase <b>s</b> into strings
diff --git a/src/or/control.h b/src/or/control.h
index 81c23010d..a83e3747e 100644
--- a/src/or/control.h
+++ b/src/or/control.h
@@ -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);