diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index dd92e78cb5..2b4540bf3b 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -4605,7 +4605,7 @@ entries_retry_helper(or_options_t *options, int act)
if (ri->is_running)
any_running = 1; /* some entry is both known and running */
else if (act) {
- /* Mark-for-close all TLS connections to this node, since
+ /* Mark all current connections to this OR as unhealthy, since
* otherwise there could be one that started 30 seconds
* ago, and in 30 seconds it will time out, causing us to mark
* the node down and undermine the retry attempt. We mark even
@@ -4613,7 +4613,7 @@ entries_retry_helper(or_options_t *options, int act)
* we'll want to attach circuits to fresh conns. */
connection_or_set_bad_connections(ri->cache_info.identity_digest, 1);
- /* mark it for retry */
+ /* mark this entry node for retry */
router_set_status(ri->cache_info.identity_digest, 1);
e->can_retry = 1;
e->bad_since = 0;
diff --git a/src/or/circuituse.c b/src/or/circuituse.c
index f651ef7c33..f369678ab0 100644
--- a/src/or/circuituse.c
+++ b/src/or/circuituse.c
@@ -959,9 +959,13 @@ circuit_build_failed(origin_circuit_t *circ)
if (circ->_base.n_conn) {
or_connection_t *n_conn = circ->_base.n_conn;
if (n_conn->is_bad_for_new_circs) {
- /* no need to blow away circuits/streams/etc. Also, don't mark this
- * router as newly down, since maybe this was just an old circuit
- * attempt that's finally timing out now. */
+ /* We only want to blame this router when a fresh healthy
+ * connection fails. So don't mark this router as newly failed,
+ * since maybe this was just an old circuit attempt that's
+ * finally timing out now. Also, there's no need to blow away
+ * circuits/streams/etc, since the failure of an unhealthy conn
+ * doesn't tell us much about whether a healthy conn would
+ * succeed. */
already_marked = 1;
}
log_info(LD_OR,
diff --git a/src/or/connection_or.c b/src/or/connection_or.c
index 836e7faef5..09f310a3df 100644
--- a/src/or/connection_or.c
+++ b/src/or/connection_or.c
@@ -606,8 +606,21 @@ connection_or_get_for_extend(const char *digest,
#define TIME_BEFORE_OR_CONN_IS_TOO_OLD (60*60*24*7)
/** Given the head of the linked list for all the or_connections with a given
- * identity, set elements of that list as is_bad_for_new_circs() as
- * appropriate. Helper for connection_or_set_bad_connections().
+ * identity, set elements of that list as is_bad_for_new_circs as
+ * appropriate. Helper for connection_or_set_bad_connections().
+ *
+ * Specifically, we set the is_bad_for_new_circs flag on:
+ * - all connections if force is true.
+ * - all connections that are too old.
+ * - all open non-canonical connections for which a canonical connection
+ * exists to the same router.
+ * - all open canonical connections for which a 'better' canonical
+ * connection exists to the same router.
+ * - all open non-canonical connections for which a 'better' non-canonical
+ * connection exists to the same router at the same address.
+ *
+ * See connection_or_is_better() for our idea of what makes one OR connection
+ * better than another.
*/
static void
connection_or_group_set_badness(or_connection_t *head, int force)
@@ -721,18 +734,8 @@ connection_or_group_set_badness(or_connection_t *head, int force)
/** Go through all the OR connections (or if digest is non-NULL, just
* the OR connections with that digest), and set the is_bad_for_new_circs
- * flag on:
- * - all connections if force is true.
- * - all connections that are too old.
- * - all open non-canonical connections for which a canonical connection
- * exists to the same router.
- * - all open canonical connections for which a 'better' canonical
- * connection exists to the same router.
- * - all open non-canonical connections for which a 'better' non-canonical
- * connection exists to the same router at the same address.
- *
- * See connection_or_is_better() for our idea of what makes one OR connection
- * better than another.
+ * flag based on the rules in connection_or_group_set_badness() (or just
+ * always set it if force is true).
*/
void
connection_or_set_bad_connections(const char *digest, int force)