diff --git a/changes/bug40639 b/changes/bug40639 index d5ab2e0cb3..d975e9ad22 100644 --- a/changes/bug40639 +++ b/changes/bug40639 @@ -1,5 +1,5 @@ o Major bugfixes (vanguards): - We had omitted some checks for whether our vanguards (second layer - guards from proposal 333) overlapped or came from the same family. - Now make sure to pick each of them to be independent. Fixes bug - 40639; bugfix on 0.4.7.1-alpha. + guards from proposal 333) overlapped. Now make sure to pick each + of them to be independent. Also, change the design to allow them to + come from the same family. Fixes bug 40639; bugfix on 0.4.7.1-alpha. diff --git a/src/feature/client/entrynodes.c b/src/feature/client/entrynodes.c index 493571173e..e7324487da 100644 --- a/src/feature/client/entrynodes.c +++ b/src/feature/client/entrynodes.c @@ -4139,10 +4139,11 @@ maintain_layer2_guards(void) /* First gather the exclusions based on our current L2 guards */ smartlist_t *excluded = smartlist_new(); SMARTLIST_FOREACH_BEGIN(layer2_guards, layer2_guard_t *, g) { - /* Exclude existing L2 guard + family so that we don't double-pick. */ + /* Exclude existing L2 guard so that we don't double-pick it. + * But, it's ok if they come from the same family. */ const node_t *existing = node_get_by_id(g->identity); if (existing) - nodelist_add_node_and_family(excluded, existing); + smartlist_add(excluded, (node_t *)existing); } SMARTLIST_FOREACH_END(g); /* Add required guards to the list */ @@ -4167,8 +4168,9 @@ maintain_layer2_guards(void) // Nickname can also be None here because it is looked up later control_event_guard("None", layer2_guard->identity, "GOOD_L2"); - /* Exclude this node and its family so that we don't double-pick. */ - nodelist_add_node_and_family(excluded, choice); + /* Exclude this node so that we don't double-pick it. (Again, coming + * from the same family is ok here.) */ + smartlist_add(excluded, (node_t *)choice); } /* Some cleanup */