summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2021-10-22 02:33:49 -0400
committerRoger Dingledine <arma@torproject.org>2021-10-28 20:57:28 -0400
commit3c8510e2c0b10637f4d2fdd81a6d0083968b7cc9 (patch)
tree5914e4839df4482141f90b2ebbcacbeff1f33689 /src
parent867c3c6f89ae67bb95cc3c714feb7898dd3c8e3b (diff)
downloadtor-3c8510e2c0b10637f4d2fdd81a6d0083968b7cc9.tar.gz
tor-3c8510e2c0b10637f4d2fdd81a6d0083968b7cc9.zip
reassess minimum-dir-info when a bridge fails
When we try to fetch a bridge descriptor and we fail, we mark the guard as failed, but we never scheduled a re-compute for router_have_minimum_dir_info(). So if we had already decided we needed to wait for this new descriptor, we would just wait forever -- even if, counterintuitively, *losing* the bridge is just what we need to *resume* using the network, if we had it in state GUARD_REACHABLE_MAYBE and we were stalling to learn this outcome. See bug 40396 for more details.
Diffstat (limited to 'src')
-rw-r--r--src/feature/client/entrynodes.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/feature/client/entrynodes.c b/src/feature/client/entrynodes.c
index 315bd54674..efc1c07763 100644
--- a/src/feature/client/entrynodes.c
+++ b/src/feature/client/entrynodes.c
@@ -2271,6 +2271,13 @@ entry_guards_note_guard_failure(guard_selection_t *gs,
guard->is_primary?"primary ":"",
guard->confirmed_idx>=0?"confirmed ":"",
entry_guard_describe(guard));
+
+ /* Schedule a re-assessment of whether we have enough dir info to
+ * use the network. Counterintuitively, *losing* a bridge might actually
+ * be just what we need to *resume* using the network, if we had it in
+ * state GUARD_REACHABLE_MAYBE and we were stalling to learn this
+ * outcome. See bug 40396 for more details. */
+ router_dir_info_changed();
}
/**