|
@@ -1976,7 +1976,8 @@ cell_queue_pop(cell_queue_t *queue)
|
|
|
* circuit mux.
|
|
|
*/
|
|
|
void
|
|
|
-update_circuit_on_cmux(circuit_t *circ, cell_direction_t direction)
|
|
|
+update_circuit_on_cmux_(circuit_t *circ, cell_direction_t direction,
|
|
|
+ const char *file, int lineno)
|
|
|
{
|
|
|
channel_t *chan = NULL;
|
|
|
or_circuit_t *or_circ = NULL;
|
|
@@ -1999,7 +2000,11 @@ update_circuit_on_cmux(circuit_t *circ, cell_direction_t direction)
|
|
|
cmux = chan->cmux;
|
|
|
|
|
|
/* Cmux sanity check */
|
|
|
- tor_assert(circuitmux_is_circuit_attached(cmux, circ));
|
|
|
+ if (! circuitmux_is_circuit_attached(cmux, circ)) {
|
|
|
+ log_warn(LD_BUG, "called on non-attachd circuit from %s:%d",
|
|
|
+ file, lineno);
|
|
|
+ return;
|
|
|
+ }
|
|
|
tor_assert(circuitmux_attached_circuit_direction(cmux, circ) == direction);
|
|
|
|
|
|
assert_cmux_ok_paranoid(chan);
|
|
@@ -2334,7 +2339,8 @@ circuit_clear_cell_queue(circuit_t *circ, channel_t *chan)
|
|
|
cell_queue_clear(queue);
|
|
|
|
|
|
/* Update the cell counter in the cmux */
|
|
|
- update_circuit_on_cmux(circ, direction);
|
|
|
+ if (chan->cmux && circuitmux_is_circuit_attached(chan->cmux, circ))
|
|
|
+ update_circuit_on_cmux(circ, direction);
|
|
|
}
|
|
|
|
|
|
/** Fail with an assert if the circuit mux on chan is corrupt
|