]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Fix a traceback when closing a blocked connection "immediately".
authorNick Mathewson <nickm@torproject.org>
Thu, 16 Nov 2017 16:45:15 +0000 (11:45 -0500)
committerNick Mathewson <nickm@torproject.org>
Thu, 16 Nov 2017 17:05:56 +0000 (12:05 -0500)
When we close a connection via connection_close_immediately, we kill
its events immediately. But if it had been blocked on bandwidth
read/write, we could try to re-add its (nonexistent) events later
from connection_bucket_refill -- if we got to that callback before
we swept the marked connections.

Fixes bug 24167.  Fortunately, this hasn't been a crash bug since we
introduced connection_check_event in 0.2.9.10, and backported it.

This is a bugfix on commit 89d422914a0c3cb, I believe, which
appeared in Tor 0.1.0.1-rc.

changes/bug24167 [new file with mode: 0644]
src/or/connection.c

diff --git a/changes/bug24167 b/changes/bug24167
new file mode 100644 (file)
index 0000000..fd0d87e
--- /dev/null
@@ -0,0 +1,7 @@
+  o Minor bugfixes (network layer):
+    - When closing a connection via close_connection_immediately(), we
+      mark it as "not blocked on bandwidth", to prevent later calls
+      from trying to unblock it, and give it permission to read. This
+      fixes a backtrace warning that can happen on relays under various
+      circumstances. Fixes bug 24167; bugfix on 0.1.0.1-rc.
+
index 276dca28188fccf38c575d78f628381df92e2154..61f4f5aa692a4127f20b160f3d06ee760ea0dae9 100644 (file)
@@ -721,6 +721,10 @@ connection_close_immediate(connection_t *conn)
 
   connection_unregister_events(conn);
 
+  /* Prevent the event from getting unblocked. */
+  conn->read_blocked_on_bw =
+    conn->write_blocked_on_bw = 0;
+
   if (SOCKET_OK(conn->s))
     tor_close_socket(conn->s);
   conn->s = TOR_INVALID_SOCKET;