diff options
author | teor <teor2345@gmail.com> | 2017-12-11 02:29:05 +1100 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2017-12-12 19:17:25 -0500 |
commit | 19a4abf2a99c6a3de2c9a2fdf3e6d7b7c404f8f8 (patch) | |
tree | 48e37c5c8b39c91a4ee509b677d93a39822d1a2e /src/or/bridges.c | |
parent | 6b5c70670b26b9560febf5dc70f814d5e515c0f8 (diff) | |
download | tor-19a4abf2a99c6a3de2c9a2fdf3e6d7b7c404f8f8.tar.gz tor-19a4abf2a99c6a3de2c9a2fdf3e6d7b7c404f8f8.zip |
Make sure bridges are definitely running before delaying directory fetches
Retry directory downloads when we get our first bridge descriptor
during bootstrap or while reconnecting to the network. Keep retrying
every time we get a bridge descriptor, until we have a reachable bridge.
Stop delaying bridge descriptor fetches when we have cached bridge
descriptors. Instead, only delay bridge descriptor fetches when we
have at least one reachable bridge.
Fixes bug 24367; bugfix on 0.2.0.3-alpha.
Diffstat (limited to 'src/or/bridges.c')
-rw-r--r-- | src/or/bridges.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/or/bridges.c b/src/or/bridges.c index ac759493cc..0b1bbbd158 100644 --- a/src/or/bridges.c +++ b/src/or/bridges.c @@ -796,7 +796,11 @@ learned_bridge_descriptor(routerinfo_t *ri, int from_cache) tor_assert(ri); tor_assert(ri->purpose == ROUTER_PURPOSE_BRIDGE); if (get_options()->UseBridges) { - int first = num_bridges_usable() <= 1; + /* Retry directory downloads whenever we get a bridge descriptor: + * - when bootstrapping, and + * - when we aren't sure if any of our bridges are reachable. + * Keep on retrying until we have at least one reachable bridge. */ + int first = num_bridges_usable(0) < 1; bridge_info_t *bridge = get_configured_bridge_by_routerinfo(ri); time_t now = time(NULL); router_set_status(ri->cache_info.identity_digest, 1); @@ -826,8 +830,8 @@ learned_bridge_descriptor(routerinfo_t *ri, int from_cache) log_notice(LD_DIR, "new bridge descriptor '%s' (%s): %s", ri->nickname, from_cache ? "cached" : "fresh", router_describe(ri)); - /* set entry->made_contact so if it goes down we don't drop it from - * our entry node list */ + /* If we didn't have a reachable bridge before this one, try directory + * documents again. */ if (first) { routerlist_retry_directory_downloads(now); } |