aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2014-04-16 23:13:27 -0400
committerNick Mathewson <nickm@torproject.org>2014-04-16 23:13:27 -0400
commit74ddd5f739696749409c933f82cf3a93152da6cc (patch)
tree8d85a2c549485cb47abba78eefe5f35869552d01
parent10174b00e7258cc8184e85c37a2a39b04a0df92e (diff)
parentf36e93206a20b37321b372802032d3dec481856d (diff)
downloadtor-74ddd5f739696749409c933f82cf3a93152da6cc.tar
tor-74ddd5f739696749409c933f82cf3a93152da6cc.tar.gz
Merge remote-tracking branch 'andrea/bug11306'
-rw-r--r--changes/bug113064
-rw-r--r--src/or/config.c5
-rw-r--r--src/or/connection.c14
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;