diff options
Diffstat (limited to 'src/or/connection.c')
-rw-r--r-- | src/or/connection.c | 36 |
1 files changed, 11 insertions, 25 deletions
diff --git a/src/or/connection.c b/src/or/connection.c index 55fd88be69..6483a8cc5f 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -875,8 +875,7 @@ int connection_handle_write(connection_t *conn) { } /** Append <b>len</b> bytes of <b>string</b> onto <b>conn</b>'s - * outbuf, and ask it to start writing. If it's an OR conn, and an - * entire TLS record is ready, then try to flush it now. + * outbuf, and ask it to start writing. */ void connection_write_to_buf(const char *string, int len, connection_t *conn) { @@ -884,33 +883,20 @@ void connection_write_to_buf(const char *string, int len, connection_t *conn) { return; if(write_to_buf(string, len, conn->outbuf) < 0) { - log_fn(LOG_WARN,"write_to_buf failed. Closing connection (fd %d).", conn->s); - /* XXX should call connection_edge_end() ? */ - connection_mark_for_close(conn); + if(conn->type == CONN_TYPE_AP || conn->type == CONN_TYPE_EXIT) { + /* if it failed, it means we have our package/delivery windows set + wrong compared to our max outbuf size. close the whole circuit. */ + log_fn(LOG_WARN,"write_to_buf failed. Closing circuit (fd %d).", conn->s); + circuit_mark_for_close(circuit_get_by_conn(conn)); + } else { + log_fn(LOG_WARN,"write_to_buf failed. Closing connection (fd %d).", conn->s); + connection_mark_for_close(conn); + } return; } connection_start_writing(conn); -#define MIN_TLS_FLUSHLEN 15872 -/* openssl tls record size is 16383, this is close. The goal here is to - * push data out as soon as we know there's enough for a tls record, so - * during periods of high load we won't read the entire megabyte from - * input before pushing any data out. */ - if(connection_speaks_cells(conn) && - conn->outbuf_flushlen < MIN_TLS_FLUSHLEN && - conn->outbuf_flushlen+len >= MIN_TLS_FLUSHLEN) { - len -= (MIN_TLS_FLUSHLEN - conn->outbuf_flushlen); - conn->outbuf_flushlen = MIN_TLS_FLUSHLEN; - if(connection_handle_write(conn) < 0) { - log_fn(LOG_WARN,"flushing failed."); - return; - } - } - if(len > 0) { /* if there's any left over */ - conn->outbuf_flushlen += len; - connection_start_writing(conn); - /* because connection_handle_write() above might have stopped writing */ - } + conn->outbuf_flushlen += len; } /** Return the conn to addr/port that has the most recent |