[or-cvs] [tor/master 13/38] Allow hold-open-until-flushed logic to work for bufferevents.

nickm at torproject.org nickm at torproject.org
Mon Sep 27 20:50:59 UTC 2010


Author: Nick Mathewson <nickm at torproject.org>
Date: Sat, 8 Aug 2009 17:47:47 -0700
Subject: Allow hold-open-until-flushed logic to work for bufferevents.
Commit: d830eb366ab037c820b138cfbb8f4bd66986bf42

---
 src/or/connection.c |    7 +++++--
 src/or/main.c       |    5 +++++
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/or/connection.c b/src/or/connection.c
index ff5c4c0..6665809 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -2661,14 +2661,17 @@ static void
 connection_handle_write_cb(struct bufferevent *bufev, void *arg)
 {
   connection_t *conn = arg;
-  (void) bufev;
+  struct evbuffer *output;
   if (connection_flushed_some(conn)<0) {
     connection_mark_for_close(conn);
     return;
   }
 
-  if (!connection_wants_to_flush(conn)) {
+  output = bufferevent_get_output(bufev);
+  if (!evbuffer_get_length(output)) {
     connection_finished_flushing(conn);
+    if (conn->marked_for_close && conn->hold_open_until_flushed)
+      conn->hold_open_until_flushed = 0;
   }
 }
 
diff --git a/src/or/main.c b/src/or/main.c
index 54c78c3..b886785 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -639,6 +639,11 @@ conn_close_if_marked(int i)
   assert_connection_ok(conn, now);
   /* assert_all_pending_dns_resolves_ok(); */
 
+#ifdef USE_BUFFEREVENTS
+  if (conn->bufev && conn->hold_open_until_flushed)
+    return 0;
+#endif
+
   log_debug(LD_NET,"Cleaning up connection (fd %d).",conn->s);
   if ((conn->s >= 0 || conn->linked_conn) && connection_wants_to_flush(conn)) {
     /* s == -1 means it's an incomplete edge connection, or that the socket
-- 
1.7.1




More information about the tor-commits mailing list