aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--changes/ticket402314
-rw-r--r--src/feature/relay/relay_find_addr.c10
2 files changed, 11 insertions, 3 deletions
diff --git a/changes/ticket40231 b/changes/ticket40231
new file mode 100644
index 0000000000..a5ba598fd1
--- /dev/null
+++ b/changes/ticket40231
@@ -0,0 +1,4 @@
+ o Minor bugfixes (relay):
+ - If we were unable to build our descriptor, don't mark that we've
+ advertised our descriptor. Also remove an harmless BUG(). Fixes bug 40231;
+ bugfix on 0.4.5.1-alpha.
diff --git a/src/feature/relay/relay_find_addr.c b/src/feature/relay/relay_find_addr.c
index 9c2c8b281c..2da2328b14 100644
--- a/src/feature/relay/relay_find_addr.c
+++ b/src/feature/relay/relay_find_addr.c
@@ -198,9 +198,13 @@ relay_addr_learn_from_dirauth(void)
return;
}
const node_t *node = node_get_by_id(rs->identity_digest);
- if (BUG(!node)) {
- /* If there is a routerstatus_t, there is a node_t thus this should
- * never fail. */
+ if (!node) {
+ /* This can happen if we are still in the early starting stage where no
+ * descriptors we actually fetched and thus we have the routerstatus_t
+ * for the authority but not its descriptor which is needed to build a
+ * circuit and thus learn our address. */
+ log_info(LD_GENERAL, "Can't build a circuit to an authority. Unable to "
+ "learn for now our address from them.");
return;
}
extend_info_t *ei = extend_info_from_node(node, 1);