Merge remote-tracking branch 'andrea/bug11306'

This commit is contained in:
Nick Mathewson 2014-04-16 23:13:27 -04:00
commit 74ddd5f739
3 changed files with 22 additions and 1 deletions

4
changes/bug11306 Normal file
View File

@ -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.

View File

@ -1179,10 +1179,13 @@ options_act_reversible(const or_options_t *old_options, char **msg)
SMARTLIST_FOREACH(replaced_listeners, connection_t *, conn, SMARTLIST_FOREACH(replaced_listeners, connection_t *, conn,
{ {
int marked = conn->marked_for_close;
log_notice(LD_NET, "Closing old %s on %s:%d", log_notice(LD_NET, "Closing old %s on %s:%d",
conn_type_to_string(conn->type), conn->address, conn->port); conn_type_to_string(conn->type), conn->address, conn->port);
connection_close_immediate(conn); connection_close_immediate(conn);
connection_mark_for_close(conn); if (!marked) {
connection_mark_for_close(conn);
}
}); });
goto done; goto done;

View File

@ -2359,6 +2359,20 @@ connection_mark_all_noncontrol_connections(void)
connection_mark_unattached_ap(TO_ENTRY_CONN(conn), connection_mark_unattached_ap(TO_ENTRY_CONN(conn),
END_STREAM_REASON_HIBERNATING); END_STREAM_REASON_HIBERNATING);
break; 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: default:
connection_mark_for_close(conn); connection_mark_for_close(conn);
break; break;