]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
The crowning bugfix.
authorRoger Dingledine <arma@torproject.org>
Sun, 21 Nov 2004 11:30:33 +0000 (11:30 +0000)
committerRoger Dingledine <arma@torproject.org>
Sun, 21 Nov 2004 11:30:33 +0000 (11:30 +0000)
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

src/or/connection_edge.c

index 0bd8247d7a09bee5280628c4c21473dd80cbf4a9..be3b07a25fd800669401af14b2ac3bba7ae51689 100644 (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) {