mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 13:13:44 +01:00
Merge branch 'bug20203_027_squashed' into maint-0.2.8
This commit is contained in:
commit
6e96eababe
6
changes/bug20203
Normal file
6
changes/bug20203
Normal file
@ -0,0 +1,6 @@
|
||||
o Major bugfixes (relay, OOM handler)
|
||||
- Fix a timing-dependent assertion failure that could occur when we
|
||||
tried to flush from a circuit after having freed its cells because
|
||||
of an out-of-memory condition. Fixes bug 20203; bugfix on
|
||||
0.2.8.1-alpha. Thanks to "cypherpunks" for help diagnosing this
|
||||
one.
|
@ -1918,8 +1918,14 @@ marked_circuit_free_cells(circuit_t *circ)
|
||||
return;
|
||||
}
|
||||
cell_queue_clear(&circ->n_chan_cells);
|
||||
if (! CIRCUIT_IS_ORIGIN(circ))
|
||||
cell_queue_clear(& TO_OR_CIRCUIT(circ)->p_chan_cells);
|
||||
if (circ->n_mux)
|
||||
circuitmux_clear_num_cells(circ->n_mux, circ);
|
||||
if (! CIRCUIT_IS_ORIGIN(circ)) {
|
||||
or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
|
||||
cell_queue_clear(&orcirc->p_chan_cells);
|
||||
if (orcirc->p_mux)
|
||||
circuitmux_clear_num_cells(orcirc->p_mux, circ);
|
||||
}
|
||||
}
|
||||
|
||||
static size_t
|
||||
|
@ -2615,6 +2615,15 @@ channel_flush_from_first_active_circuit, (channel_t *chan, int max))
|
||||
}
|
||||
|
||||
/* Circuitmux told us this was active, so it should have cells */
|
||||
if (/*BUG(*/ queue->n == 0 /*)*/) {
|
||||
log_warn(LD_BUG, "Found a supposedly active circuit with no cells "
|
||||
"to send. Trying to recover.");
|
||||
circuitmux_set_num_cells(cmux, circ, 0);
|
||||
if (! circ->marked_for_close)
|
||||
circuit_mark_for_close(circ, END_CIRC_REASON_INTERNAL);
|
||||
continue;
|
||||
}
|
||||
|
||||
tor_assert(queue->n > 0);
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user