diff --git a/src/or/connection.c b/src/or/connection.c index 34db732cfd..4dfbb2d54d 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -674,7 +674,7 @@ int connection_outbuf_too_full(connection_t *conn) { return (conn->outbuf_flushlen > 10*CELL_PAYLOAD_SIZE); } -/* return -1 if you want to break the conn, else return 0 */ +/* mark and return -1 if you want to break the conn, else return 0 */ int connection_handle_write(connection_t *conn) { tor_assert(!connection_is_listener(conn)); @@ -732,8 +732,10 @@ int connection_handle_write(connection_t *conn) { } if(!connection_wants_to_flush(conn)) /* it's done flushing */ - if(connection_finished_flushing(conn) < 0) /* ...and get handled here. */ + if(connection_finished_flushing(conn) < 0) { /* ...and get handled here. */ + /* already marked */ return -1; + } return 0; } @@ -762,7 +764,7 @@ void connection_write_to_buf(const char *string, int len, connection_t *conn) { conn->outbuf_flushlen = MIN_TLS_FLUSHLEN; if(connection_handle_write(conn) < 0) { log_fn(LOG_WARN,"flushing failed."); - connection_mark_for_close(conn,0); + return; } } if(len > 0) { /* if there's any left over */