From 95238eb9174f0cfee9d313ce15b4f9b471f3d0e5 Mon Sep 17 00:00:00 2001 From: Nick Mathewson Date: Thu, 16 Nov 2017 11:45:15 -0500 Subject: Fix a traceback when closing a blocked connection "immediately". 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. --- src/or/connection.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/or/connection.c b/src/or/connection.c index 276dca2818..61f4f5aa69 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -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; -- cgit v1.2.3-54-g00ecf