aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/or/connection.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/or/connection.c b/src/or/connection.c
index 919da19f5..4108aa2a2 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -481,6 +481,19 @@ void connection_send_cell(connection_t *conn) {
/* ???? If we might not have added a cell above, why are we
* ???? increasing outbuf_flushlen? -NM */
+ /* The connection_write_cell_to_buf() call doesn't increase the flushlen
+ * (if link padding is on). So if there isn't a whole cell waiting-but-
+ * not-yet-flushed, we add a padding cell. Thus in any case the gap between
+ * outbuf_datalen and outbuf_flushlen is at least sizeof(cell_t). -RD
+ */
+ /* XXXX actually, there are some subtle bugs lurking in here. They
+ * have to do with the fact that we don't handle connection failure
+ * cleanly. Sometimes we mark things to be closed later. Inside
+ * connection_write_cell_to_buf, it returns successfully without
+ * writing if the connection has been marked for close. We need to
+ * look at all our failure cases more carefully and make sure they do
+ * the right thing.
+ */
conn->outbuf_flushlen += sizeof(cell_t); /* instruct it to send a cell */
connection_start_writing(conn);