diff options
author | Nick Mathewson <nickm@torproject.org> | 2013-03-19 16:35:40 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2013-03-19 16:35:40 -0400 |
commit | ca50fb4f81a1f48c82d75825687085cda4627424 (patch) | |
tree | 9e3722d4e651029bfe6735c75fee1d2a6ae385a9 /src | |
parent | 323cb655be7802a3f527bfa4278478d9fbd23944 (diff) | |
download | tor-ca50fb4f81a1f48c82d75825687085cda4627424.tar tor-ca50fb4f81a1f48c82d75825687085cda4627424.tar.gz |
Don't assert when writing a cell to a CLOSING connection.
Instead, drop the cell.
Fixes another case of bug 7350; bugfix on 0.2.4.4-alpha
Diffstat (limited to 'src')
-rw-r--r-- | src/or/channel.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/or/channel.c b/src/or/channel.c index 82db061af..4e9086f2e 100644 --- a/src/or/channel.c +++ b/src/or/channel.c @@ -1751,6 +1751,14 @@ channel_write_cell(channel_t *chan, cell_t *cell) tor_assert(chan); tor_assert(cell); + if (chan->state == CHANNEL_STATE_CLOSING) { + log_debug(LD_CHANNEL, "Discarding cell_t %p on closing channel %p with " + "global ID "U64_FORMAT, cell, chan, + U64_PRINTF_ARG(chan->global_identifier)); + tor_free(cell); + return; + } + log_debug(LD_CHANNEL, "Writing cell_t %p to channel %p with global ID " U64_FORMAT, @@ -1777,6 +1785,14 @@ channel_write_packed_cell(channel_t *chan, packed_cell_t *packed_cell) tor_assert(chan); tor_assert(packed_cell); + if (chan->state == CHANNEL_STATE_CLOSING) { + log_debug(LD_CHANNEL, "Discarding packed_cell_t %p on closing channel %p " + "with global ID "U64_FORMAT, packed_cell, chan, + U64_PRINTF_ARG(chan->global_identifier)); + packed_cell_free(packed_cell); + return; + } + log_debug(LD_CHANNEL, "Writing packed_cell_t %p to channel %p with global ID " U64_FORMAT, @@ -1805,6 +1821,14 @@ channel_write_var_cell(channel_t *chan, var_cell_t *var_cell) tor_assert(chan); tor_assert(var_cell); + if (chan->state == CHANNEL_STATE_CLOSING) { + log_debug(LD_CHANNEL, "Discarding var_cell_t %p on closing channel %p " + "with global ID "U64_FORMAT, var_cell, chan, + U64_PRINTF_ARG(chan->global_identifier)); + var_cell_free(var_cell); + return; + } + log_debug(LD_CHANNEL, "Writing var_cell_t %p to channel %p with global ID " U64_FORMAT, |