mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-23 20:03:31 +01:00
Bug 40827: Add additional logs and checks for 0-leg conflux case
This commit is contained in:
parent
5487476fd9
commit
e3ad41e7e5
@ -536,7 +536,7 @@ conflux_note_cell_sent(conflux_t *cfx, circuit_t *circ, uint8_t relay_command)
|
|||||||
|
|
||||||
/** Find the leg with lowest non-zero curr_rtt_usec, and
|
/** Find the leg with lowest non-zero curr_rtt_usec, and
|
||||||
* pick it for our current leg. */
|
* pick it for our current leg. */
|
||||||
static inline void
|
static inline bool
|
||||||
conflux_pick_first_leg(conflux_t *cfx)
|
conflux_pick_first_leg(conflux_t *cfx)
|
||||||
{
|
{
|
||||||
conflux_leg_t *min_leg = NULL;
|
conflux_leg_t *min_leg = NULL;
|
||||||
@ -555,8 +555,20 @@ conflux_pick_first_leg(conflux_t *cfx)
|
|||||||
} CONFLUX_FOR_EACH_LEG_END(leg);
|
} CONFLUX_FOR_EACH_LEG_END(leg);
|
||||||
|
|
||||||
if (!min_leg) {
|
if (!min_leg) {
|
||||||
// Get the 0th leg; if it does not exist, assert
|
// Get the 0th leg; if it does not exist, log the set.
|
||||||
tor_assert(smartlist_len(cfx->legs) > 0);
|
// Bug 40827 managed to hit this, so let's dump the sets
|
||||||
|
// in case it happens again.
|
||||||
|
if (BUG(smartlist_len(cfx->legs) <= 0)) {
|
||||||
|
// Since we have no legs, we have no idea if this is really a client
|
||||||
|
// or server set. Try to find any that match:
|
||||||
|
log_warn(LD_BUG, "Matching client sets:");
|
||||||
|
conflux_log_set(cfx, true);
|
||||||
|
log_warn(LD_BUG, "Matching server sets:");
|
||||||
|
conflux_log_set(cfx, false);
|
||||||
|
log_warn(LD_BUG, "End conflux set dump");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
min_leg = smartlist_get(cfx->legs, 0);
|
min_leg = smartlist_get(cfx->legs, 0);
|
||||||
tor_assert(min_leg);
|
tor_assert(min_leg);
|
||||||
if (BUG(min_leg->linked_sent_usec == 0)) {
|
if (BUG(min_leg->linked_sent_usec == 0)) {
|
||||||
@ -572,6 +584,8 @@ conflux_pick_first_leg(conflux_t *cfx)
|
|||||||
cfx->cells_until_switch = 0;
|
cfx->cells_until_switch = 0;
|
||||||
|
|
||||||
cfx->curr_leg = min_leg;
|
cfx->curr_leg = min_leg;
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -589,7 +603,8 @@ conflux_decide_next_circ(conflux_t *cfx)
|
|||||||
/* If we don't have a current leg yet, pick one.
|
/* If we don't have a current leg yet, pick one.
|
||||||
* (This is the only non-const operation in this function). */
|
* (This is the only non-const operation in this function). */
|
||||||
if (!cfx->curr_leg) {
|
if (!cfx->curr_leg) {
|
||||||
conflux_pick_first_leg(cfx);
|
if (!conflux_pick_first_leg(cfx))
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* First, check if we can switch. */
|
/* First, check if we can switch. */
|
||||||
|
@ -2352,6 +2352,24 @@ connection_edge_package_raw_inbuf(edge_connection_t *conn, int package_partial,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bug 40827: With conflux, we suspect marked circuits were getting here.
|
||||||
|
// We think we fixed it, but let's add a check and log sets if it still
|
||||||
|
// happens.
|
||||||
|
if (BUG(circ->marked_for_close)) {
|
||||||
|
log_warn(LD_BUG,
|
||||||
|
"called on circ that's already marked for close at %s:%d.",
|
||||||
|
circ->marked_for_close_file, circ->marked_for_close);
|
||||||
|
if (CIRCUIT_IS_CONFLUX(circ)) {
|
||||||
|
if (circ->conflux) {
|
||||||
|
conflux_log_set(circ->conflux, CIRCUIT_IS_ORIGIN(circ));
|
||||||
|
} else {
|
||||||
|
log_warn(LD_BUG, " - circ is unlinked conflux");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
conn->end_reason = END_STREAM_REASON_INTERNAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if (circuit_consider_stop_edge_reading(circ, cpath_layer))
|
if (circuit_consider_stop_edge_reading(circ, cpath_layer))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user