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
This commit is contained in:
Roger Dingledine 2004-11-21 11:30:33 +00:00
parent 27b8797245
commit 4f2c2c9948

View File

@ -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) {