[tor-commits] [tor/master] Fold all of the run-every-second stuff back into run_scheduled_events()

nickm at torproject.org nickm at torproject.org
Tue Nov 17 13:28:57 UTC 2015


commit 2bf8fb5ee3a62cb6c2f16d2f37f54213e092d4cc
Author: Nick Mathewson <nickm at torproject.org>
Date:   Mon Nov 2 15:09:48 2015 -0500

    Fold all of the run-every-second stuff back into run_scheduled_events()
---
 src/or/main.c |  228 +++++++++++++++++++++------------------------------------
 1 file changed, 85 insertions(+), 143 deletions(-)

diff --git a/src/or/main.c b/src/or/main.c
index 593bf0c..e0ea856 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -1237,10 +1237,8 @@ CALLBACK(rotate_onion_key);
 CALLBACK(check_ed_keys);
 CALLBACK(launch_descriptor_fetches);
 CALLBACK(reset_descriptor_failures);
-CALLBACK(fetch_bridge_descriptors);
 CALLBACK(rotate_x509_certificate);
 CALLBACK(add_entropy);
-CALLBACK(enable_accounting);
 CALLBACK(launch_reachability_tests);
 CALLBACK(downrate_stability);
 CALLBACK(save_stability);
@@ -1254,16 +1252,11 @@ CALLBACK(retry_dns);
 CALLBACK(check_descriptor);
 CALLBACK(check_for_reachability_bw);
 CALLBACK(fetch_networkstatus);
-CALLBACK(dirvote_act);
-CALLBACK(expire_misc);
 CALLBACK(retry_listeners);
-CALLBACK(build_circuits);
 CALLBACK(expire_old_ciruits_serverside);
-CALLBACK(housekeeping);
 CALLBACK(check_dns_honesty);
 CALLBACK(write_bridge_ns);
 CALLBACK(check_fw_helper_app);
-CALLBACK(pt_configuration);
 CALLBACK(heartbeat);
 
 #undef CALLBACK
@@ -1274,10 +1267,8 @@ static periodic_event_item_t periodic_events[] = {
   CALLBACK(check_ed_keys),
   CALLBACK(launch_descriptor_fetches),
   CALLBACK(reset_descriptor_failures),
-  CALLBACK(fetch_bridge_descriptors),
   CALLBACK(rotate_x509_certificate),
   CALLBACK(add_entropy),
-  CALLBACK(enable_accounting),
   CALLBACK(launch_reachability_tests),
   CALLBACK(downrate_stability),
   CALLBACK(save_stability),
@@ -1291,16 +1282,11 @@ static periodic_event_item_t periodic_events[] = {
   CALLBACK(check_descriptor),
   CALLBACK(check_for_reachability_bw),
   CALLBACK(fetch_networkstatus),
-  CALLBACK(dirvote_act),
-  CALLBACK(expire_misc),
   CALLBACK(retry_listeners),
-  CALLBACK(build_circuits),
   CALLBACK(expire_old_ciruits_serverside),
-  CALLBACK(housekeeping),
   CALLBACK(check_dns_honesty),
   CALLBACK(write_bridge_ns),
   CALLBACK(check_fw_helper_app),
-  CALLBACK(pt_configuration),
   CALLBACK(heartbeat),
   END_OF_PERIODIC_EVENTS
 };
@@ -1423,6 +1409,8 @@ safe_timer_diff(time_t now, time_t next)
 static void
 run_scheduled_events(time_t now)
 {
+  const or_options_t *options = get_options();
+
   /* 0. See if we've been asked to shut down and our timeout has
    * expired; or if our bandwidth limits are exhausted and we
    * should hibernate; or if it's time to wake up from hibernation.
@@ -1439,6 +1427,85 @@ run_scheduled_events(time_t now)
 
   /* 0c. If we've deferred log messages for the controller, handle them now */
   flush_pending_log_callbacks();
+
+  if (options->UseBridges && !options->DisableNetwork) {
+    fetch_bridge_descriptors(options, now);
+  }
+
+  if (accounting_is_enabled(options)) {
+    accounting_run_housekeeping(now);
+  }
+
+  if (authdir_mode_v3(options)) {
+    dirvote_act(options, now);
+  }
+
+    /* 3a. Every second, we examine pending circuits and prune the
+   *    ones which have been pending for more than a few seconds.
+   *    We do this before step 4, so it can try building more if
+   *    it's not comfortable with the number of available circuits.
+   */
+  /* (If our circuit build timeout can ever become lower than a second (which
+   * it can't, currently), we should do this more often.) */
+  circuit_expire_building();
+
+  /* 3b. Also look at pending streams and prune the ones that 'began'
+   *     a long time ago but haven't gotten a 'connected' yet.
+   *     Do this before step 4, so we can put them back into pending
+   *     state to be picked up by the new circuit.
+   */
+  connection_ap_expire_beginning();
+
+  /* 3c. And expire connections that we've held open for too long.
+   */
+  connection_expire_held_open();
+
+  /* 4. Every second, we try a new circuit if there are no valid
+   *    circuits. Every NewCircuitPeriod seconds, we expire circuits
+   *    that became dirty more than MaxCircuitDirtiness seconds ago,
+   *    and we make a new circ if there are no clean circuits.
+   */
+  const int have_dir_info = router_have_minimum_dir_info();
+  if (have_dir_info && !net_is_disabled()) {
+    circuit_build_needed_circs(now);
+  } else {
+    circuit_expire_old_circs_as_needed(now);
+  }
+
+  /* 5. We do housekeeping for each connection... */
+  connection_or_set_bad_connections(NULL, 0);
+  int i;
+  for (i=0;i<smartlist_len(connection_array);i++) {
+    run_connection_housekeeping(i, now);
+  }
+
+  /* 6. And remove any marked circuits... */
+  circuit_close_all_marked();
+
+  /* 7. And upload service descriptors if necessary. */
+  if (have_completed_a_circuit() && !net_is_disabled()) {
+    rend_consider_services_upload(now);
+    rend_consider_descriptor_republication();
+  }
+
+  /* 8. and blow away any connections that need to die. have to do this now,
+   * because if we marked a conn for close and left its socket -1, then
+   * we'll pass it to poll/select and bad things will happen.
+   */
+  close_closeable_connections();
+
+  /* 8b. And if anything in our state is ready to get flushed to disk, we
+   * flush it. */
+  or_state_save(now);
+
+  /* 8c. Do channel cleanup just like for connections */
+  channel_run_cleanup();
+  channel_listener_run_cleanup();
+
+  /* 11b. check pending unconfigured managed proxies */
+  if (!net_is_disabled() && pt_proxies_configuration_pending())
+    pt_configure_remaining_proxies();
+
 }
 
 static int
@@ -1508,16 +1575,6 @@ reset_descriptor_failures_callback(time_t now, const or_options_t *options)
 }
 
 static int
-fetch_bridge_descriptors_callback(time_t now, const or_options_t *options)
-{
-  if (options->UseBridges && !options->DisableNetwork) {
-    fetch_bridge_descriptors(options, now);
-    return 1;
-  }
-  return -1;
-}
-
-static int
 rotate_x509_certificate_callback(time_t now, const or_options_t *options)
 {
   static int first = 1;
@@ -1557,18 +1614,6 @@ add_entropy_callback(time_t now, const or_options_t *options)
 }
 
 static int
-enable_accounting_callback(time_t now, const or_options_t *options)
-{
-  /* 1c. If we have to change the accounting interval or record
-   * bandwidth used in this accounting interval, do so. */
-  if (accounting_is_enabled(options)) {
-    accounting_run_housekeeping(now);
-    return 1;
-  }
-  return -1;
-}
-
-static int
 launch_reachability_tests_callback(time_t now, const or_options_t *options)
 {
   if (authdir_mode_tests_reachability(options) &&
@@ -1728,7 +1773,7 @@ rend_cache_failure_clean_callback(time_t now, const or_options_t *options)
    * clean it as soon as we can since we want to make sure the client waits
    * as little as possible for reachability reasons. */
   rend_cache_failure_clean(now);
-  return 1;
+  return 30;
 }
 
 static int
@@ -1825,46 +1870,6 @@ fetch_networkstatus_callback(time_t now, const or_options_t *options)
 }
 
 static int
-dirvote_act_callback(time_t now, const or_options_t *options)
-{
-  /* 2c. Let directory voting happen. */
-  if (authdir_mode_v3(options)) {
-    dirvote_act(options, now);
-    return 1;
-  }
-  return -1;
-}
-
-static int
-expire_misc_callback(time_t now, const or_options_t *options)
-{
-  (void)now;
-  (void)options;
-
-  /* 3a. Every second, we examine pending circuits and prune the
-   *    ones which have been pending for more than a few seconds.
-   *    We do this before step 4, so it can try building more if
-   *    it's not comfortable with the number of available circuits.
-   */
-  /* (If our circuit build timeout can ever become lower than a second (which
-   * it can't, currently), we should do this more often.) */
-  circuit_expire_building();
-
-  /* 3b. Also look at pending streams and prune the ones that 'began'
-   *     a long time ago but haven't gotten a 'connected' yet.
-   *     Do this before step 4, so we can put them back into pending
-   *     state to be picked up by the new circuit.
-   */
-  connection_ap_expire_beginning();
-
-  /* 3c. And expire connections that we've held open for too long.
-   */
-  connection_expire_held_open();
-
-  return 1;
-}
-
-static int
 retry_listeners_callback(time_t now, const or_options_t *options)
 {
   (void)now;
@@ -1878,24 +1883,6 @@ retry_listeners_callback(time_t now, const or_options_t *options)
 }
 
 static int
-build_circuits_callback(time_t now, const or_options_t *options)
-{
-  (void)options;
-  /* 4. Every second, we try a new circuit if there are no valid
-   *    circuits. Every NewCircuitPeriod seconds, we expire circuits
-   *    that became dirty more than MaxCircuitDirtiness seconds ago,
-   *    and we make a new circ if there are no clean circuits.
-   */
-  const int have_dir_info = router_have_minimum_dir_info();
-  if (have_dir_info && !net_is_disabled()) {
-    circuit_build_needed_circs(now);
-  } else {
-    circuit_expire_old_circs_as_needed(now);
-  }
-  return 1;
-}
-
-static int
 expire_old_ciruits_serverside_callback(time_t now, const or_options_t *options)
 {
   (void)options;
@@ -1904,42 +1891,6 @@ expire_old_ciruits_serverside_callback(time_t now, const or_options_t *options)
   return 11;
 }
 
-static int
-housekeeping_callback(time_t now, const or_options_t *options)
-{
-  (void)options;
-  int i;
-  /* 5. We do housekeeping for each connection... */
-  connection_or_set_bad_connections(NULL, 0);
-  for (i=0;i<smartlist_len(connection_array);i++) {
-    run_connection_housekeeping(i, now);
-  }
-
-  /* 6. And remove any marked circuits... */
-  circuit_close_all_marked();
-
-  /* 7. And upload service descriptors if necessary. */
-  if (have_completed_a_circuit() && !net_is_disabled()) {
-    rend_consider_services_upload(now);
-    rend_consider_descriptor_republication();
-  }
-
-  /* 8. and blow away any connections that need to die. have to do this now,
-   * because if we marked a conn for close and left its socket -1, then
-   * we'll pass it to poll/select and bad things will happen.
-   */
-  close_closeable_connections();
-
-  /* 8b. And if anything in our state is ready to get flushed to disk, we
-   * flush it. */
-  or_state_save(now);
-
-  /* 8c. Do channel cleanup just like for connections */
-  channel_run_cleanup();
-  channel_listener_run_cleanup();
-
-  return 1;
-}
 
 static int
 check_dns_honesty_callback(time_t now, const or_options_t *options)
@@ -1999,26 +1950,17 @@ check_fw_helper_app_callback(time_t now, const or_options_t *options)
 }
 
 static int
-pt_configuration_callback(time_t now, const or_options_t *options)
-{
-  (void)now;
-  (void)options;
-  /* 11b. check pending unconfigured managed proxies */
-  if (!net_is_disabled() && pt_proxies_configuration_pending())
-    pt_configure_remaining_proxies();
-  return 1;
-}
-
-static int
 heartbeat_callback(time_t now, const or_options_t *options)
 {
   static int first = 1;
   /* 12. write the heartbeat message */
   if (first) {
-    first = 0;
+    first = 0; /* Skip the first one. */
   } else {
     log_heartbeat(now);
   }
+  /* XXXX This isn't such a good way to handle possible changes in the
+   * callback event */
   return options->HeartbeatPeriod;
 }
 





More information about the tor-commits mailing list