[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/master] Decouple routerlist_retry_directory_downloads() from the blob
commit e62518865b312816211086c6a0d080e7258dae5b
Author: Nick Mathewson <nickm@xxxxxxxxxxxxxx>
Date: Thu Aug 13 09:41:43 2015 -0400
Decouple routerlist_retry_directory_downloads() from the blob
Instead of having it call update_all_descriptor_downloads and
update_networkstatus_downloads directly, we can have it cause them to
get rescheduled and called from run_scheduled_events.
Closes ticket 16789.
---
changes/decouple_retry_directory | 6 ++++++
src/or/main.c | 11 +++++++++++
src/or/main.h | 1 +
src/or/routerlist.c | 6 ++----
4 files changed, 20 insertions(+), 4 deletions(-)
diff --git a/changes/decouple_retry_directory b/changes/decouple_retry_directory
new file mode 100644
index 0000000..11f901b
--- /dev/null
+++ b/changes/decouple_retry_directory
@@ -0,0 +1,6 @@
+ o Code simplification and refactoring:
+ - Change the function that's called when we need to retry all downloads
+ so that it only reschedules the downloads to happen immediately, rather
+ than launching them all at once itself. This further simplifies
+ Tor's callgraph.
+
diff --git a/src/or/main.c b/src/or/main.c
index a29387c..2e50c5b 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -1280,6 +1280,17 @@ reschedule_descriptor_update_check(void)
time_to.check_descriptor = 0;
}
+/**
+ * Update our schedule so that we'll check whether we need to fetch directory
+ * info immediately.
+ */
+void
+reschedule_directory_downloads(void)
+{
+ time_to.download_networkstatus = 0;
+ time_to.try_getting_descriptors = 0;
+}
+
/** Perform regular maintenance tasks. This function gets run once per
* second by second_elapsed_callback().
*/
diff --git a/src/or/main.h b/src/or/main.h
index be0bd64..31883d4 100644
--- a/src/or/main.h
+++ b/src/or/main.h
@@ -54,6 +54,7 @@ void ip_address_changed(int at_interface);
void dns_servers_relaunch_checks(void);
void reset_all_main_loop_timers(void);
void reschedule_descriptor_update_check(void);
+void reschedule_directory_downloads(void);
MOCK_DECL(long,get_uptime,(void));
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index aebbd48..8bd8039 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -4013,12 +4013,10 @@ update_all_descriptor_downloads(time_t now)
void
routerlist_retry_directory_downloads(time_t now)
{
+ (void)now;
router_reset_status_download_failures();
router_reset_descriptor_download_failures();
- if (get_options()->DisableNetwork)
- return;
- update_networkstatus_downloads(now);
- update_all_descriptor_downloads(now);
+ reschedule_directory_downloads();
}
/** Return true iff <b>router</b> does not permit exit streams.
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits