summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2016-02-23 10:45:39 -0500
committerNick Mathewson <nickm@torproject.org>2016-02-23 10:45:39 -0500
commitd3af4f4e43267f79239d116fd2c35e0ca9632f8b (patch)
tree77a5447f50ea8ccdf520665f18ea8541e62023c0
parente88686cb2cbae39333982505f38f2d7568af4f32 (diff)
parente3eaee1d2cbd0bc03a40e374376ca72195a9d64d (diff)
downloadtor-d3af4f4e43267f79239d116fd2c35e0ca9632f8b.tar.gz
tor-d3af4f4e43267f79239d116fd2c35e0ca9632f8b.zip
Merge remote-tracking branch 'arma/bug16825'
-rw-r--r--changes/bug168257
-rw-r--r--src/or/directory.c15
-rw-r--r--src/or/main.c6
-rw-r--r--src/or/main.h2
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);