diff options
author | Roger Dingledine <arma@torproject.org> | 2004-04-25 22:23:54 +0000 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2004-04-25 22:23:54 +0000 |
commit | 482d7e7cd3018fe1f71c015fb4941abbeabe6fca (patch) | |
tree | 552c86132cbcd10c3f138e3ebc4b258a686161d7 /src/or/connection.c | |
parent | 01dea610e3e8bae74128beb6d79610c3ac4da110 (diff) | |
download | tor-482d7e7cd3018fe1f71c015fb4941abbeabe6fca.tar tor-482d7e7cd3018fe1f71c015fb4941abbeabe6fca.tar.gz |
resolve a double-mark-for-close when things die inside connection_handle_write
svn:r1702
Diffstat (limited to 'src/or/connection.c')
-rw-r--r-- | src/or/connection.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/or/connection.c b/src/or/connection.c index 34db732cf..4dfbb2d54 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 */ |