From 4c9138d6406285077c3fc527f181610cd81b5727 Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Wed, 12 May 2004 18:41:32 +0000 Subject: calling flush_buf and not checking for return value is bad svn:r1851 --- src/or/main.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'src/or') 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; } -- cgit v1.2.3