Merge branch 'maint-0.2.9' into maint-0.3.0

This commit is contained in:
Nick Mathewson 2017-11-13 11:15:50 -05:00
commit 9092e9019a
2 changed files with 17 additions and 0 deletions

6
changes/bug8185_025 Normal file
View File

@ -0,0 +1,6 @@
o Minor bugfixes (logging, relay shutdown, annoyance):
- When a circuit is marked for close, do not attempt to package any cells
for channels on that circuit. Previously, we would detect this
condition lower in the call stack, when we noticed that the circuit had
no attached channel, and log an annoying message. Fixes bug 8185;
bugfix on 0.2.5.4-alpha.

View File

@ -419,6 +419,11 @@ circuit_package_relay_cell(cell_t *cell, circuit_t *circ,
{ {
channel_t *chan; /* where to send the cell */ channel_t *chan; /* where to send the cell */
if (circ->marked_for_close) {
/* Circuit is marked; send nothing. */
return 0;
}
if (cell_direction == CELL_DIRECTION_OUT) { if (cell_direction == CELL_DIRECTION_OUT) {
crypt_path_t *thishop; /* counter for repeated crypts */ crypt_path_t *thishop; /* counter for repeated crypts */
chan = circ->n_chan; chan = circ->n_chan;
@ -732,6 +737,12 @@ connection_edge_send_command(edge_connection_t *fromconn,
return -1; return -1;
} }
if (circ->marked_for_close) {
/* The circuit has been marked, but not freed yet. When it's freed, it
* will mark this connection for close. */
return -1;
}
return relay_send_command_from_edge(fromconn->stream_id, circ, return relay_send_command_from_edge(fromconn->stream_id, circ,
relay_command, payload, relay_command, payload,
payload_len, cpath_layer); payload_len, cpath_layer);