From: Roger Dingledine Date: Sun, 21 Nov 2004 11:30:33 +0000 (+0000) Subject: The crowning bugfix. X-Git-Tag: tor-0.0.9rc1~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4f2c2c99488d53294d1e0445055c8fdcde4ccb06;p=thirdparty%2Ftor.git The crowning bugfix. The problem was that with high load, circuit package window was reaching 0. Whenever we got a circuit-level sendme, we were reading a lot on each socket, but only writing out a bit. So we would eventually reach eof. This would be noticed and acted on even when there are still bytes sitting in the inbuf. svn:r2932 --- diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c index 0bd8247d7a..be3b07a25f 100644 --- a/src/or/connection_edge.c +++ b/src/or/connection_edge.c @@ -34,7 +34,10 @@ int connection_edge_reached_eof(connection_t *conn) { } return 0; #else - /* eof reached, kill it. */ + if(buf_datalen(conn->inbuf)) { + /* it still has stuff to process. don't let it die yet. */ + return 0; + } log_fn(LOG_INFO,"conn (fd %d) reached eof (stream size %d). Closing.", conn->s, (int)conn->stream_size); connection_edge_end(conn, END_STREAM_REASON_DONE, conn->cpath_layer); if(!conn->marked_for_close) {