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.
This commit is contained in:
Nick Mathewson 2015-08-13 09:41:43 -04:00
parent 6b26962966
commit e62518865b
4 changed files with 20 additions and 4 deletions

View File

@ -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.

View File

@ -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().
*/

View File

@ -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));

View File

@ -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.