diff options
author | Nick Mathewson <nickm@torproject.org> | 2016-02-23 10:45:39 -0500 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2016-02-23 10:45:39 -0500 |
commit | d3af4f4e43267f79239d116fd2c35e0ca9632f8b (patch) | |
tree | 77a5447f50ea8ccdf520665f18ea8541e62023c0 | |
parent | e88686cb2cbae39333982505f38f2d7568af4f32 (diff) | |
parent | e3eaee1d2cbd0bc03a40e374376ca72195a9d64d (diff) | |
download | tor-d3af4f4e43267f79239d116fd2c35e0ca9632f8b.tar.gz tor-d3af4f4e43267f79239d116fd2c35e0ca9632f8b.zip |
Merge remote-tracking branch 'arma/bug16825'
-rw-r--r-- | changes/bug16825 | 7 | ||||
-rw-r--r-- | src/or/directory.c | 15 | ||||
-rw-r--r-- | src/or/main.c | 6 | ||||
-rw-r--r-- | src/or/main.h | 2 |
4 files changed, 20 insertions, 10 deletions
diff --git a/changes/bug16825 b/changes/bug16825 new file mode 100644 index 0000000000..75c5627efd --- /dev/null +++ b/changes/bug16825 @@ -0,0 +1,7 @@ + o Minor bugfixes: + - Count receipt of new microdescriptors as progress towards + bootstrapping. Now, when a user who has set EntryNodes finishes + bootstrapping, Tor automatically repopulates the guard set based + on this new directory information. Fixes bug 16825; bugfix on + 0.2.3.1-alpha. + diff --git a/src/or/directory.c b/src/or/directory.c index 109dbce7eb..627699118c 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -1764,7 +1764,7 @@ load_downloaded_routers(const char *body, smartlist_t *which, added = router_load_routers_from_string(body, NULL, SAVED_NOWHERE, which, descriptor_digests, buf); - if (general) + if (added && general) control_event_bootstrap(BOOTSTRAP_STATUS_LOADING_DESCRIPTORS, count_loading_descriptors_progress()); return added; @@ -1965,7 +1965,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn) routers_update_all_from_networkstatus(now, 3); update_microdescs_from_networkstatus(now); update_microdesc_downloads(now); - directory_info_has_arrived(now, 0); + directory_info_has_arrived(now, 0, 0); log_info(LD_DIR, "Successfully loaded consensus."); } @@ -2001,7 +2001,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn) * ones got flushed to disk so it's safe to call this on them */ connection_dir_download_cert_failed(conn, status_code); } else { - directory_info_has_arrived(now, 0); + directory_info_has_arrived(now, 0, 0); log_info(LD_DIR, "Successfully loaded certificates from fetch."); } } else { @@ -2115,7 +2115,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn) if (load_downloaded_routers(body, which, descriptor_digests, conn->router_purpose, conn->base_.address)) - directory_info_has_arrived(now, 0); + directory_info_has_arrived(now, 0, 0); } } if (which) { /* mark remaining ones as failed */ @@ -2166,8 +2166,11 @@ connection_dir_client_reached_eof(dir_connection_t *conn) /* Mark remaining ones as failed. */ dir_microdesc_download_failed(which, status_code); } - control_event_bootstrap(BOOTSTRAP_STATUS_LOADING_DESCRIPTORS, - count_loading_descriptors_progress()); + if (mds && smartlist_len(mds)) { + control_event_bootstrap(BOOTSTRAP_STATUS_LOADING_DESCRIPTORS, + count_loading_descriptors_progress()); + directory_info_has_arrived(now, 0, 1); + } SMARTLIST_FOREACH(which, char *, cp, tor_free(cp)); smartlist_free(which); smartlist_free(mds); diff --git a/src/or/main.c b/src/or/main.c index 408f2447c1..96a56fcb90 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -1002,12 +1002,12 @@ directory_all_unreachable(time_t now) /** This function is called whenever we successfully pull down some new * network statuses or server descriptors. */ void -directory_info_has_arrived(time_t now, int from_cache) +directory_info_has_arrived(time_t now, int from_cache, int suppress_logs) { const or_options_t *options = get_options(); if (!router_have_minimum_dir_info()) { - int quiet = from_cache || + int quiet = suppress_logs || from_cache || directory_too_idle_to_fetch_descriptors(options, now); tor_log(quiet ? LOG_INFO : LOG_NOTICE, LD_DIR, "I learned some more directory information, but not enough to " @@ -2391,7 +2391,7 @@ do_main_loop(void) * appropriate.) */ now = time(NULL); - directory_info_has_arrived(now, 1); + directory_info_has_arrived(now, 1, 0); if (server_mode(get_options())) { /* launch cpuworkers. Need to do this *after* we've read the onion key. */ diff --git a/src/or/main.h b/src/or/main.h index 37e93d79d3..74071166e8 100644 --- a/src/or/main.h +++ b/src/or/main.h @@ -48,7 +48,7 @@ MOCK_DECL(void,connection_start_writing,(connection_t *conn)); void connection_stop_reading_from_linked_conn(connection_t *conn); void directory_all_unreachable(time_t now); -void directory_info_has_arrived(time_t now, int from_cache); +void directory_info_has_arrived(time_t now, int from_cache, int suppress_logs); void ip_address_changed(int at_interface); void dns_servers_relaunch_checks(void); |