aboutsummaryrefslogtreecommitdiff
path: root/src/core/or/channelpadding.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2018-09-11 14:32:39 -0400
committerNick Mathewson <nickm@torproject.org>2018-09-11 14:32:39 -0400
commit2d0a6d76916d61e6264d8537e0d99daeae9829ba (patch)
tree8f01503c3851a405f199391b50abbc29f7a18a74 /src/core/or/channelpadding.c
parent7852499812a4bbe707ff0da065a853de69be2c4d (diff)
parent578aaa7f122df32cdf4ffe713bc8aa179433fb0b (diff)
downloadtor-2d0a6d76916d61e6264d8537e0d99daeae9829ba.tar.gz
tor-2d0a6d76916d61e6264d8537e0d99daeae9829ba.zip
Merge remote-tracking branch 'mikeperry/bug25505'
Diffstat (limited to 'src/core/or/channelpadding.c')
-rw-r--r--src/core/or/channelpadding.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/core/or/channelpadding.c b/src/core/or/channelpadding.c
index 1a8f8209d0..0a7e93d391 100644
--- a/src/core/or/channelpadding.c
+++ b/src/core/or/channelpadding.c
@@ -376,7 +376,8 @@ channelpadding_send_padding_cell_for_callback(channel_t *chan)
chan->pending_padding_callback = 0;
if (monotime_coarse_is_zero(&chan->next_padding_time) ||
- chan->has_queued_writes(chan)) {
+ chan->has_queued_writes(chan) ||
+ (chan->cmux && circuitmux_num_cells(chan->cmux))) {
/* We must have been active before the timer fired */
monotime_coarse_zero(&chan->next_padding_time);
return;
@@ -743,7 +744,11 @@ channelpadding_decide_to_pad_channel(channel_t *chan)
return CHANNELPADDING_WONTPAD;
}
- if (!chan->has_queued_writes(chan)) {
+ /* There should always be a cmux on the circuit. After that,
+ * only schedule padding if there are no queued writes and no
+ * queued cells in circuitmux queues. */
+ if (chan->cmux && !chan->has_queued_writes(chan) &&
+ !circuitmux_num_cells(chan->cmux)) {
int is_client_channel = 0;
if (CHANNEL_IS_CLIENT(chan, options)) {