diff options
author | Roger Dingledine <arma@torproject.org> | 2004-05-12 18:41:32 +0000 |
---|---|---|
committer | Roger Dingledine <arma@torproject.org> | 2004-05-12 18:41:32 +0000 |
commit | 4c9138d6406285077c3fc527f181610cd81b5727 (patch) | |
tree | 5c3f6a67cd30658c8aa025cb69b5d39e70721028 /src/or | |
parent | 9eee0fadc3a5dca80b354d1f386e5c18a353c501 (diff) | |
download | tor-4c9138d6406285077c3fc527f181610cd81b5727.tar tor-4c9138d6406285077c3fc527f181610cd81b5727.tar.gz |
calling flush_buf and not checking for return value is bad
svn:r1851
Diffstat (limited to 'src/or')
-rw-r--r-- | src/or/main.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/or/main.c b/src/or/main.c index 65be5363e..a2150eb91 100644 --- a/src/or/main.c +++ b/src/or/main.c @@ -351,15 +351,21 @@ static void run_connection_housekeeping(int i, time_t now) { if(conn->type == CONN_TYPE_DIR && !conn->marked_for_close && conn->timestamp_lastwritten + 5*60 < now) { - log_fn(LOG_WARN,"Expiring wedged directory conn (purpose %d)", conn->purpose); + log_fn(LOG_WARN,"Expiring wedged directory conn (fd %d, purpose %d)", conn->s, conn->purpose); /* XXXX This next check may help isolate where the pesky EPIPE bug * really occurs. */ if (connection_wants_to_flush(conn)) { - flush_buf(conn->s, conn->outbuf, &conn->outbuf_flushlen); + if(flush_buf(conn->s, conn->outbuf, &conn->outbuf_flushlen) < 0) { + log_fn(LOG_WARN,"flushing expired directory conn failed."); + connection_close_immediate(conn); + connection_mark_for_close(conn,0); + /* */ + } else { + /* XXXX Does this next part make sense, really? */ + connection_mark_for_close(conn,0); + conn->hold_open_until_flushed = 1; /* give it a last chance */ + } } - connection_mark_for_close(conn,0); - /* XXXX Does this next part make sense, really? */ - conn->hold_open_until_flushed = 1; /* give it a last chance */ return; } |