|
@@ -1382,10 +1382,11 @@ circuit_build_failed(origin_circuit_t *circ)
|
|
|
failed_at_last_hop = 1;
|
|
|
}
|
|
|
if (circ->cpath &&
|
|
|
- circ->cpath->state != CPATH_STATE_OPEN) {
|
|
|
- /* We failed at the first hop. If there's an OR connection
|
|
|
- * to blame, blame it. Also, avoid this relay for a while, and
|
|
|
- * fail any one-hop directory fetches destined for it. */
|
|
|
+ circ->cpath->state != CPATH_STATE_OPEN &&
|
|
|
+ ! circ->base_.received_destroy) {
|
|
|
+ /* We failed at the first hop for some reason other than a DESTROY cell.
|
|
|
+ * If there's an OR connection to blame, blame it. Also, avoid this relay
|
|
|
+ * for a while, and fail any one-hop directory fetches destined for it. */
|
|
|
const char *n_chan_id = circ->cpath->extend_info->identity_digest;
|
|
|
int already_marked = 0;
|
|
|
if (circ->base_.n_chan) {
|