diff options
author | Nick Mathewson <nickm@torproject.org> | 2014-04-16 23:13:27 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2014-04-16 23:13:27 -0400 |
commit | 74ddd5f739696749409c933f82cf3a93152da6cc (patch) | |
tree | 8d85a2c549485cb47abba78eefe5f35869552d01 | |
parent | 10174b00e7258cc8184e85c37a2a39b04a0df92e (diff) | |
parent | f36e93206a20b37321b372802032d3dec481856d (diff) | |
download | tor-74ddd5f739696749409c933f82cf3a93152da6cc.tar tor-74ddd5f739696749409c933f82cf3a93152da6cc.tar.gz |
Merge remote-tracking branch 'andrea/bug11306'
-rw-r--r-- | changes/bug11306 | 4 | ||||
-rw-r--r-- | src/or/config.c | 5 | ||||
-rw-r--r-- | src/or/connection.c | 14 |
3 files changed, 22 insertions, 1 deletions
diff --git a/changes/bug11306 b/changes/bug11306 new file mode 100644 index 000000000..bf8ea4011 --- /dev/null +++ b/changes/bug11306 @@ -0,0 +1,4 @@ + o Bugfixes: + - When closing all connections on setting DisableNetwork to 1, use + connection_or_close_normally() rather than closing orconns out from + under the channel layer. Fixes bug #11306. diff --git a/src/or/config.c b/src/or/config.c index 23a63ccd2..b5827bee6 100644 --- a/src/or/config.c +++ b/src/or/config.c @@ -1179,10 +1179,13 @@ options_act_reversible(const or_options_t *old_options, char **msg) SMARTLIST_FOREACH(replaced_listeners, connection_t *, conn, { + int marked = conn->marked_for_close; log_notice(LD_NET, "Closing old %s on %s:%d", conn_type_to_string(conn->type), conn->address, conn->port); connection_close_immediate(conn); - connection_mark_for_close(conn); + if (!marked) { + connection_mark_for_close(conn); + } }); goto done; diff --git a/src/or/connection.c b/src/or/connection.c index 1be4c45dd..0c61b0d61 100644 --- a/src/or/connection.c +++ b/src/or/connection.c @@ -2359,6 +2359,20 @@ connection_mark_all_noncontrol_connections(void) connection_mark_unattached_ap(TO_ENTRY_CONN(conn), END_STREAM_REASON_HIBERNATING); break; + case CONN_TYPE_OR: + { + or_connection_t *orconn = TO_OR_CONN(conn); + if (orconn->chan) { + connection_or_close_normally(orconn, 0); + } else { + /* + * There should have been one, but mark for close and hope + * for the best.. + */ + connection_mark_for_close(conn); + } + } + break; default: connection_mark_for_close(conn); break; |