]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Exit immediately if we can't monitor our owning controller process
authorRobert Ransom <rransom.8774@gmail.com>
Mon, 16 May 2011 17:25:59 +0000 (10:25 -0700)
committerRobert Ransom <rransom.8774@gmail.com>
Fri, 20 May 2011 15:25:42 +0000 (08:25 -0700)
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.

src/or/config.c
src/or/control.c
src/or/control.h

index b2bc9f3e9a3ab1108330e51ce8a39368f37a0ac8..0d1c37f6b6b52ad6a7f0eebee88e547d15127d67 100644 (file)
@@ -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) {
index 3a969044385c6e990aadd3758bf871cd1ea6f96e..67e8b00d19c52ca1295acf2c6ef2e9213f6771c5 100644 (file)
@@ -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
index 81c23010d2a077e36d594ddfd8d3e7b2afe397f3..a83e3747e645b01fc729464775473587fd901275 100644 (file)
@@ -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);