commit e62518865b312816211086c6a0d080e7258dae5b Author: Nick Mathewson nickm@torproject.org 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.