summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2004-04-25 22:23:54 +0000
committerRoger Dingledine <arma@torproject.org>2004-04-25 22:23:54 +0000
commit482d7e7cd3018fe1f71c015fb4941abbeabe6fca (patch)
tree552c86132cbcd10c3f138e3ebc4b258a686161d7
parent01dea610e3e8bae74128beb6d79610c3ac4da110 (diff)
downloadtor-482d7e7cd3018fe1f71c015fb4941abbeabe6fca.tar.gz
tor-482d7e7cd3018fe1f71c015fb4941abbeabe6fca.zip
resolve a double-mark-for-close when things die inside connection_handle_write
svn:r1702
-rw-r--r--src/or/connection.c8
1 files changed, 5 insertions, 3 deletions
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 */